我想拥有字段标签(又称标题)和特定于我的子类页面的帮助文本。考虑以下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
的{{1}}(标签)和/或heading
时,甚至使用基数{ {1}}类(例如help_text
),除非我在字段声明中更改了Page
或search_description
参数或两者都更改,否则Wagtail管理员中的那些部分不会更新。
但是,对于label
字段,我尝试通过help_text
更改其帮助文本,如another question中所述。但这不符合我的需求,因为它替换了所有 Wagtail页面(包括子类页面)中该字段的search_description
。
因此,我决定深入研究BlogPostPage._meta
的来源,并在help_text
下找到this:
wagtail.admin.edit_handlers
上面的代码翻译为: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
的{{1}}设置FieldPanel
和self.heading
的参数,并忽略上述参数。这样可以防止self.help_text
覆盖它们。但是我worked around通过继承label
并将其子类用于上述面板来实现。
事实证明,在https://github.com/wagtail/wagtail/issues/161之前的GitHub问题中对此进行了讨论。
为什么help_text
(以及models.py
)采用这种方式设计?