Трясогузка: Как установить дочернюю метку InlinePanel на основе полей модели?
Как установить значение метки на дочерней InlinePanel ("Field 1") на основе добавляемых полей модели?
Мои модели:
class FormField(AbstractFormField):
label = models.CharField(
blank=True,
verbose_name=_("label"),
max_length=255,
help_text=_("The label of the form field"),
)
field_type = models.CharField(
verbose_name="field type",
max_length=16,
choices=(("section", "Section"),) + FORM_FIELD_CHOICES,
)
page = ParentalKey(
'ContactPageBase',
on_delete=models.CASCADE,
related_name='form_fields',
)
И страница контактной формы:
class ContactPageBase(WagtailCaptchaEmailForm, BasePage):
...
content_panels = AbstractEmailForm.content_panels + [
FieldPanel('contact_intro'),
InlinePanel('form_fields', heading=_('Form fields'), label=_("Field")),
FieldPanel('thank_you_text')
]
Я понимаю, что метку можно редактировать, как описано выше, но это относится ко всему набору дочерних элементов в InlinePanel, а я хотел бы отображать в метке что-то вроде "{FormField.field_type} - {FormField.label}", чтобы это было понятно в обзоре справа. Как этого можно добиться?
Чтобы динамически устанавливать метку на дочерней InlinePanel в зависимости от полей добавляемой модели, вы можете переопределить метод str в вашей модели FormField.
class FormField(AbstractFormField):
...
def __str__(self):
return f"{self.get_field_type_display()} - {self.label}"
class ContactPageBase(Page):
...
content_panels = [
FieldPanel('contact_intro'),
InlinePanel('form_fields', label=_("Field")),
FieldPanel('thank_you_text')
]