【问题标题】:Is there a way to override the label and help text on a FieldPanel?有没有办法覆盖 FieldPanel 上的标签和帮助文本?
【发布时间】:2019-08-13 17:02:36
【问题描述】:

我想更改管理界面中某些Page 字段的帮助文本和标签。 FieldPanel 似乎通常会从模型字段中获取标签和帮助文本,但是由于我想更改 Page 模型上字段的这些值(特别是 titlesearch_description),我无法在字段本身上设置 verbose_namehelp_text

我尝试将 headinghelp_text 关键字参数传递给 FieldPanel,但我仍然在管理界面中看到默认标签和帮助文本。

class MyPage(Page):
    content_panels = [
        FieldPanel('title', heading='Name', classname='full'),
        FieldPanel('search_description', heading='Description',
                   classname='full',
                   help_text='Description used in indices and search results')
    ]

【问题讨论】:

    标签: wagtail


    【解决方案1】:

    有一种方法可以逐个字段覆盖默认的help_text 和标签(称为verbose_name)。

    MyPage._meta.get_field("title").help_text = "Help me Obi-Wan, you're my only help_text"
    MyPage._meta.get_field("title").verbose_name = "Jedi Labelling"
    

    有这个方法。然后还有 MultiFieldPanel 的 heading,Dan Swain 在他的回答中很好地涵盖了这一点。

    如果这一切都不起作用,总有 Wagtail HelpPanel。在http://docs.wagtail.io/en/v2.6.1/reference/pages/panels.html#helppanel的文档中了解更多信息

    如果你喜欢从视频中学习,我还围绕这个主题创建了a YouTube video

    希望这会有所帮助!

    【讨论】:

    • 奇怪的是,这似乎只适用于一类。例如如果我在一个班级上为标题字段的help_text 执行此操作,它工作正常。如果我然后为标题字段的help_text 为同一文件下方的不同页面类执行此操作,则第一个类使用为第二个定义的帮助文本!是的,我检查过我使用了正确的类名。
    • 这似乎是一个已知问题,创建自定义表单似乎是一种更好的方法。见stackoverflow.com/a/61569075/250962
    【解决方案2】:

    我不知道将帮助文本直接添加到单个字段的简单方法,但您可以将字段包装在 MultiFieldPanel 中并在其上放置标题:

    class MyPage(Page):
        content_panels = [
            MultiFieldPanel([
                FieldPanel('title', heading='Name', classname='full'),
                FieldPanel('search_description', heading='Description',
                           classname='full',
                           help_text='Description used in indices and search results')
            ], heading="your help text")
        ]
    

    wagtail.core.models.py 你会看到:

    from django.utils.translation import ugettext_lazy as _
    
    class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
        title = models.CharField(
            verbose_name=_('title'),
            max_length=255,
            help_text=_("The page title as you'd like it to be seen by the public")
        )
    

    由于Page 不是一个抽象类,即使您尝试重新定义title,您can't override 的字段也会在您自己的基于Page 的类中。另外,请注意 ugettext_lazy as _ 的导入,然后是 verbose_name 声明中的 _('title')This answer 解释说这段代码正在获取titleverbose_name 的翻译版本。

    【讨论】:

    • 这至少可以将帮助文本添加到search_description(没有任何内容),但它并没有真正解决标签更改。似乎headinghelp_text 关键字参数应该覆盖FieldPanel 中的这些值,但也许我误解了它们的使用方式。
    • 谢谢,丹,但这仍然不能真正回答我的问题。我知道你不能覆盖Page 模型中的字段,这就是为什么我要询问覆盖FieldPanel 上的标签和帮助文本的原因。看起来 FieldPanel 构造函数允许您使用 headinghelp_text 关键字参数指定这些值,但这不起作用,所以要么这不是那些用途,我做错了什么,或者有错误。
    【解决方案3】:

    来自 Wagtail Slack 中 @KalobTulien 的建议似乎可以解决问题:

    class MyPage(Page):
        pass
    
    MyPage._meta.get_field('title').verbose_name = 'name'
    MyPage._meta.get_field('search_description').help_text = 'Description used in indices and search results'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多