ParentalKey未链接到Wagtail CM中的所有子类

2024-06-16 10:03:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了3个抽象模型类: SimpleContent(只保留标题、副标题和摘要。所有文本) VisualContent(图像、富文本字段) Ctalinkitem(用于添加url,可以是页面、外部或文档)

我想创建另一个类,它可以包含这些类的组合,从而形成一个类似模块的类。在

例如,RichContent将拥有所有3个 TextLinkContent将具有SimpleContent和Ctalinkitem

我创建了一个这样的类

class RichContent (SimpleContent, VisualContent, Ctalinkitem):
    class Meta:
        abstract = True

然后我尝试创建一个指向页面的链接

^{pr2}$

然后我将它作为InlinePanel添加到页面中

LandingPage.content_panels = [
    FieldPanel('title',classname='full title'),
    InlinePanel(LandingPage,'landingpage_richcontent_link', label='Rich Content'),classname='full',heading='Rich Content'),
]

我做了迁移,没有出错。但是,当我试图创建LandingPage时,我只能看到来自SimpleContent的字段。我看不到VisualContentCtalinkitem的任何输入字段。在

如果我将RichContent的声明改为:

class RichContent (VisualContent, SimpleContent, Ctalinkitem):

那么我只能看到VisualContent中的字段。在

我想知道我的做法是否正确?有什么解决办法吗?在


Tags: 模型文本title页面contentfullclassrich
1条回答
网友
1楼 · 发布于 2024-06-16 10:03:05

您需要在RichContent上提供一个显式的panels定义,可能类似于:

RichContent.panels = SimpleContent.panels + VisualContent.panels + Ctalinkitem.panels

Wagtail可以在某些情况下自动生成面板定义,但这是相当有限的(例如,它不识别页面选择器面板)——尤其是,如果您已经在每个超类上有一个panels定义,那么它不会自动将这些组合成一个列表。相反,您在这里看到的是Python的多重继承规则,导致第一个超类的panels属性覆盖后面的超类。在

相关问题 更多 >