Wagtail:扩展页面模型

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

我过去曾为Wagtail创建多个页面。

示例:

class PlainPage(Page):
    body = StreamField(BasicStreamBlock, null=True, blank=True)

    content_panels = Page.content_panels + [
        StreamFieldPanel('body'),
    ]

现在,我想扩展所有这些页面,让它们可以将它们设置为无索引。

由于这个原因,我想在promove_panel中添加一个布尔字段。

将这个功能添加到我已经创建的所有页面中的最佳方法是什么?

no_index    = models.BooleanField(default=False)

promote_panels = Page.promote_panels + [
    FieldPanel('no_index'),
]

用这种代码扩展我所有的Page类的正确的Wagtail方法是什么?

extend wagtail
1个回答
0
投票

使用Django的Class Mixins,可以轻松地将字段添加到所有现有模型中。

1。创建一个混音

首先-创建一个扩展CustomPageMixin模型并设置了元Page的新abstract=True(命名为任意名称)。>>

class CustomPageMixin(Page):
    class Meta:
        abstract=True

    no_index = models.BooleanField(default=False)

    # adding to content_panels on other pages will need to use THIS promote_panels
    # e.g. promote_panels = CustomPageMixin.promote_panels + [...]
    promote_panels = Page.promote_panels + [
        FieldPanel('no_index'),
    ]

2。更新所有现有的页面模型

更新使用中的所有模型以使用mixin,而不是扩展Page类,它们实际上将直接扩展您的mixin。

from ... import CustomPageMixin

class StandardPage(CustomPageMixin):
    #...

class HomePage(CustomPageMixin):
    #...

3。运行迁移

注意:这会将no_index字段添加到现在扩展了您的新混音的所有页面。

  • ./manage.py makemigrations
  • ./manage.py migrate
  • 此方法的潜在问题

  • 这可能不是最好的方法,因为它有点间接,乍看之下很难理解。
  • 这实际上不会更改Page模型字段,因此只有在您通过Page.specific访问实际特定模型的实例时,它才可用。
  • 将其用于特殊的Page.specific类型,例如Page会比较棘手。
© www.soinside.com 2019 - 2024. All rights reserved.