Я хочу иметь метки полей (или заголовки) и текст справки, относящийся к моим подклассам. Рассмотрим следующий код models.py
:
from django.db import models
from wagtail.core.models import Page
from wagtail.admin.edit_handlers import FieldPanel
class BlogPostPage(Page):
body = models.TextField(blank=False)
author = models.CharField(blank=True, help_text="Name of the person who wrote this post.")
content_panels = Page.content_panels + [
FieldPanel("author", help_text="Custom help text that should appear in the admin")
FieldPanel("body", heading="Post body", help_text="Some more custom help text")
]
promote_panels = [
# ...
FieldPanel("search_description", heading="Page description", help_text="A short summary of the page")
]
Когда я попытался переопределить FieldPanel
heading
(метка) и / или help_text
, передав параметры, как в приведенном выше коде, - илидаже с существующими полями из базового класса Page
, такими как search_description
, эти части в администраторе Wagtail не будут обновляться, пока я не изменю параметр label
или help_text
или оба в объявлениях полей.
Для поля search_description
я попытался изменить его текст справки на BlogPostPage._meta
, как уже описано в другой вопрос . Но это не соответствовало моим потребностям, потому что оно заменило help_text
для этого поля на всех страницах трясогузки, включая подклассы.
Поэтому я решил поискать источник wagtail.admin.edit_handlers
и найдено this в FieldPanel
:
def on_form_bound(self):
self.bound_field = self.form[self.field_name]
self.heading = self.bound_field.label
self.help_text = self.bound_field.help_text
Приведенный выше код транслируется так: FieldPanel
всегда устанавливает self.heading
и self.help_text
из поля label
дляhelp_text
параметров соответственно и игнорирует вышеупомянутые параметры. Это мешает models.py
переопределить их. Но я обошел , создав подкласс FieldPanel
и используя вместо этого этот подкласс для вышеуказанных панелей.
Также оказалось, что это обсуждалось в проблеме GitHub ранее: https://github.com/wagtail/wagtail/issues/161.
Есть ли причины, по которым FieldPanel
с (а также ChooserPanel
с) спроектированы таким образом?