Трясогузка: Как установить дочернюю метку InlinePanel на основе полей модели?

Как установить значение метки на дочерней InlinePanel ("Field 1") на основе добавляемых полей модели? InlinePanel Form fields - Field N

Мои модели:

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')
    ]
Вернуться на верх