Wagtail:扩展页面模型
Wagtail: Extend page model
我过去为 Wagtail 创建了多个页面。
示例:
class PlainPage(Page):
body = StreamField(BasicStreamBlock, null=True, blank=True)
content_panels = Page.content_panels + [
StreamFieldPanel('body'),
]
现在我想扩展所有这些页面,让它们可以设置为无索引。
出于这个原因,我想向 promote_panel 添加一个布尔字段。
将此功能添加到我已创建的所有页面的最佳方式是什么?
no_index = models.BooleanField(default=False)
promote_panels = Page.promote_panels + [
FieldPanel('no_index'),
]
使用此代码扩展我的所有页面 类 的正确 Wagtail 方法是什么?
使用 Django 的 Class Mixins,可以毫不费力地向所有现有模型添加字段。
1。创建一个 Mixin
首先 - 创建一个扩展 Page
模型并设置元 abstract=True
的新 CustomPageMixin
(随便命名)。
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
class,它们实际上会直接扩展您的 mixin。
from ... import CustomPageMixin
class StandardPage(CustomPageMixin):
#...
class HomePage(CustomPageMixin):
#...
3。 运行 迁移
注意:这会将 no_index
字段添加到现在扩展您的新 mixin 的所有页面。
./manage.py makemigrations
./manage.py migrate
这种方法的潜在问题
- 这可能不是最好的方法,因为它有点间接,乍一看很难理解。
- 这实际上并没有改变页面模型字段,因此它只有在您通过
Page.specific
访问实际特定模型的实例时才可用
- 将它用于特殊的
Page
类型(例如 AbstractEmailForm
. 会有点棘手
我过去为 Wagtail 创建了多个页面。
示例:
class PlainPage(Page):
body = StreamField(BasicStreamBlock, null=True, blank=True)
content_panels = Page.content_panels + [
StreamFieldPanel('body'),
]
现在我想扩展所有这些页面,让它们可以设置为无索引。
出于这个原因,我想向 promote_panel 添加一个布尔字段。
将此功能添加到我已创建的所有页面的最佳方式是什么?
no_index = models.BooleanField(default=False)
promote_panels = Page.promote_panels + [
FieldPanel('no_index'),
]
使用此代码扩展我的所有页面 类 的正确 Wagtail 方法是什么?
使用 Django 的 Class Mixins,可以毫不费力地向所有现有模型添加字段。
1。创建一个 Mixin
首先 - 创建一个扩展 Page
模型并设置元 abstract=True
的新 CustomPageMixin
(随便命名)。
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
class,它们实际上会直接扩展您的 mixin。
from ... import CustomPageMixin
class StandardPage(CustomPageMixin):
#...
class HomePage(CustomPageMixin):
#...
3。 运行 迁移
注意:这会将 no_index
字段添加到现在扩展您的新 mixin 的所有页面。
./manage.py makemigrations
./manage.py migrate
这种方法的潜在问题
- 这可能不是最好的方法,因为它有点间接,乍一看很难理解。
- 这实际上并没有改变页面模型字段,因此它只有在您通过
Page.specific
访问实际特定模型的实例时才可用
- 将它用于特殊的
Page
类型(例如AbstractEmailForm
. 会有点棘手