将可订购模型添加到 Wagtail CMS 中的自定义设置

Add Orderable Model to custom settings in Wagtail CMS

我想在适当的位置组织常见的网站元素。例如,站点页脚元素。据我所知,站点设置是一个很好的方法。一切都很顺利,直到我决定在那里添加 Orderable 模型,以便能够构建某种可迭代列表,其中一些项目包含属性 "text"、"URL link"。我遇到了麻烦,我以前在页面模型中应用的通常方法对我没有帮助。这是代码:

@register_setting
class SiteFooterSettings(BaseSetting):
    class Meta:
        verbose_name = _('Footer Settings')

    blog_title = models.CharField(_('Title'), max_length=50, null=True, blank=True)
    blog_article_button_text = models.CharField(_('Article Button Text'), max_length=50, null=True, blank=True)

    panels = [
        MultiFieldPanel(
            heading=_('Our Blog'),
            children=[
                FieldPanel('blog_title'),
                FieldPanel('blog_article_button_text'),
            ],
            classname='collapsible'
        ),

        MultiFieldPanel(
            heading=_('Blog Menu Items'),
            children=[
                InlinePanel('blog_menu_items', label=_('Blog Menu Item')),
            ],
            classname='collapsible'
        ),
    ]


class SettingsBlogMenu(Orderable):
    page = ForeignKey('ds.SiteFooterSettings', related_name='blog_menu_items')
    blog_menu_item = models.CharField(_('Item'), max_length=70, null=True, blank=True)
    blog_menu_item_url = models.CharField(_('URL'), max_length=70, null=True, blank=True)

    panels = [
        FieldPanel('blog_menu_item'),
        FieldPanel('blog_menu_item_url')
    ]

通常我使用ParentalKey 将这种列表绑定到页面。虽然在迁移期间 Django 抛出错误并建议将其更改为外键。最后我得到 “/admin/settings/ds/sitefootersettings/2/ 处的键错误 'blog_menu_items'

这是怎么回事?谢谢

更新。最近我发现了这个话题。

https://github.com/wagtail/wagtail/issues/3435

首先post包括非常清楚的代码示例如何处理。它对我有用。