Wagtail:如何根据模型字段设置InlinePanel子标签?

问题描述 投票:0回答:1

如何根据要添加的模型的字段将 InlinePanel 子项(“字段 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}”的内容,以便在右侧概述。如何才能实现这一目标?

python django wagtail
1个回答
0
投票

要根据要添加的模型的字段动态设置 InlinePanel 子项上的标签,您可以重写 FormField 模型中的 str 方法。

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')
    ]
© www.soinside.com 2019 - 2024. All rights reserved.