我过去曾为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方法是什么?
使用Django的Class Mixins,可以轻松地将字段添加到所有现有模型中。
首先-创建一个扩展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.specific
访问实际特定模型的实例时,它才可用。Page.specific
类型,例如Page
会比较棘手。