ParentalKey 未链接到 Wagtail CMS 中的所有子类
ParentalKey not linked to all subclasses in Wagtail CMS
我创建了 3 个抽象模型 classes:
SimpleContent
(仅保留标题、副标题和摘要。所有基于文本)
VisualContent
(一张图片,一个富文本字段)
Ctalinkitem
(用于添加 url,可以是页面、外部或文档)
我想创建另一个 classes 可以包含这些 classes 的组合以形成 'module-like' class.
例如RichContent
将拥有全部 3 个
TextLinkContent 将有 SimpleContent 和 Ctalinkitem
我创建了一个这样的class
class RichContent (SimpleContent, VisualContent, Ctalinkitem):
class Meta:
abstract = True
然后我尝试创建一个link页面
class LandingPageRichContent(Orderable, RichContent):
page = ParentalKey('LandingPage', related_name='landingpage_richcontent_link')
然后我将其作为 InlinePanel
添加到页面
LandingPage.content_panels = [
FieldPanel('title',classname='full title'),
InlinePanel(LandingPage,'landingpage_richcontent_link', label='Rich Content'),classname='full',heading='Rich Content'),
]
我进行了迁移并且没有错误。但是,当我尝试创建 LandingPage
时,我只能看到来自 SimpleContent
的字段。我看不到 VisualContent
和 Ctalinkitem
的任何输入字段。
如果我将 RichContent
的声明更改为:
class RichContent (VisualContent, SimpleContent, Ctalinkitem):
然后我只能看到来自 VisualContent
的字段。
我想知道我的做法是否正确?有解决办法吗?
您需要在 RichContent
上提供明确的 panels
定义,可能类似于:
RichContent.panels = SimpleContent.panels + VisualContent.panels + Ctalinkitem.panels
Wagtail 在某些情况下能够自动生成面板定义,但这相当有限(例如,它无法识别页面选择器面板)- 特别是,如果您已经有 panels
在每个超类上定义,那么它不会自动将它们组合成一个列表。相反,您在这里看到的是 Python 的多重继承规则导致第一个超类的 panels
属性覆盖后面的属性。
我创建了 3 个抽象模型 classes:
SimpleContent
(仅保留标题、副标题和摘要。所有基于文本)
VisualContent
(一张图片,一个富文本字段)
Ctalinkitem
(用于添加 url,可以是页面、外部或文档)
我想创建另一个 classes 可以包含这些 classes 的组合以形成 'module-like' class.
例如RichContent
将拥有全部 3 个
TextLinkContent 将有 SimpleContent 和 Ctalinkitem
我创建了一个这样的class
class RichContent (SimpleContent, VisualContent, Ctalinkitem):
class Meta:
abstract = True
然后我尝试创建一个link页面
class LandingPageRichContent(Orderable, RichContent):
page = ParentalKey('LandingPage', related_name='landingpage_richcontent_link')
然后我将其作为 InlinePanel
LandingPage.content_panels = [
FieldPanel('title',classname='full title'),
InlinePanel(LandingPage,'landingpage_richcontent_link', label='Rich Content'),classname='full',heading='Rich Content'),
]
我进行了迁移并且没有错误。但是,当我尝试创建 LandingPage
时,我只能看到来自 SimpleContent
的字段。我看不到 VisualContent
和 Ctalinkitem
的任何输入字段。
如果我将 RichContent
的声明更改为:
class RichContent (VisualContent, SimpleContent, Ctalinkitem):
然后我只能看到来自 VisualContent
的字段。
我想知道我的做法是否正确?有解决办法吗?
您需要在 RichContent
上提供明确的 panels
定义,可能类似于:
RichContent.panels = SimpleContent.panels + VisualContent.panels + Ctalinkitem.panels
Wagtail 在某些情况下能够自动生成面板定义,但这相当有限(例如,它无法识别页面选择器面板)- 特别是,如果您已经有 panels
在每个超类上定义,那么它不会自动将它们组合成一个列表。相反,您在这里看到的是 Python 的多重继承规则导致第一个超类的 panels
属性覆盖后面的属性。