/ / Як візуалізувати форми django modelformset_factory вручну - django, django-форми, набори форм

Як зробити формат django modelformset_factory вручну - django, django-forms, formsets

Я використовую форму django "modelformset_factory для завантаження та редагування зображень. В даний час, коли я показую форми, вона показує форми з існуючими даними наступним чином:

  • назва поля: На даний момент: посилання на зображення (наприклад: images / filename.jpg)
  • Зміна: поле введення зображення
  • прапорець для видалення

Як я можу змінити дисплей (На даний момент: посилання на зображення (наприклад: images / filename.jpg))? хотів би змінити посилання на зображення, щоб відображати ім'я зображення, а відкривати його у новому вікні, коли користувач натискає на нього. Я перевірив документацію django, щоб вручну надати форму, але не зміг знайти пов’язану інформацію.

Дякую!

Моделі:

class BaseImageAbstractModel(models.Model):
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey("content_type","object_id")

class Meta:
abstract = True

class ImageAbstractModel(BaseImageAbstractModel):
user = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
name = models.CharField(max_length=50, blank=True)
description = models.TextField(max_length=3000)
picture = models.ImageField(upload_to="images")
submit_date = models.DateTimeField(default=None)
is_public = models.BooleanField(default=True)
is_removed = models.BooleanField(default=False)

class Meta:
abstract = True

def __str__(self):
pass

class Image(ImageAbstractModel):
class Meta:
verbose_name = "Image"
verbose_name_plural = "Images"

def __str__(self):
return self.name
class ImageForm(BootstrapForm, ModelForm):

class Meta:
model = Image
fields = ("picture", "name")

ImgFormSet = modelformset_factory(Image, form=ImageForm, extra=5, can_delete=True)

Відповіді:

0 для відповіді № 1

Рішення полягає в підкласі класу ClearableFileInput та переосмисленні наступного:

class image_widget(ClearableFileInput):
initial_text = ugettext_lazy("")
template_with_initial = ("%(initial_text)s <a target="_blank" href="%(initial_url)s">%(initial)s</a> "
"%(clear_template)s<br />%(input_text)s: %(input)s")

def get_template_substitution_values(self, value):
return {
"initial": "Current Picture",
"initial_url": conditional_escape(value.url),
}

class ImageForm(BootstrapForm, ModelForm):

class Meta:
model = Image
fields = ("picture", "name")
widgets = {"picture": image_widget,}

Тепер висновок виглядає так:

  • Назва поля: Поточне зображення
  • Зміна: поле введення зображення
  • Поставте прапорець для видалення

Довідкова документація Джанго