extend - Wagtail:扩展页面模型
问题描述
我在过去为 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'),
]
用这段代码扩展我所有的 Page 类的正确 Wagtail 方法是什么?
解决方案
使用 Django 的Class Mixins,可以轻松地将字段添加到所有现有模型中。
1. 创建一个 Mixin
首先-创建一个扩展模型并具有元集的新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
字段添加到现在扩展新 mixin 的所有页面。
./manage.py makemigrations
./manage.py migrate
这种方法的潜在问题
- 这可能不是最好的方法,因为它有点间接且乍一看很难理解。
- 这实际上并没有更改页面模型字段,因此只有在您通过以下方式访问实际特定模型的实例时它才可用
Page.specific
- 将其用于特殊
Page
类型(例如AbstractEmailForm
.
推荐阅读
- javascript - 未在特定块外定义的变量
- jquery - 如何在表格实时搜索中显示“未找到记录”消息
- react-native - React Native 浮动动画
- r - 如何解释这条不从零开始的 ROC AUC 曲线
- java - JMockit 模拟铸造
- python - 如何使用 tkinter 在我的 python 脚本中调用 tcl 命令?
- c# - 在 c# 中检查是否存在带有 json 响应正文的属性值
- linux - 每次集群启动时运行 SQL
- reinforcement-learning - 双深度 Q 学习中的 Q 值过冲
- leaflet - 使用传单在屏幕上有多个地图,想将其修复为单个