ParentalKey未链接到Wagtail CMS

时间:2015-05-04 23:36:00

标签: python django wagtail

我创建了3个抽象模型类: SimpleContent(仅保留标题,副标题和摘要。所有文字均基于) VisualContent(图片,richtext字段) Ctalinkitem(用于添加网址,可以是网页,外部网页或文档)

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

e.g。 RichContent将拥有其中的所有3个 TextLinkContent将具有SimpleContent和Ctalinkitem

我创建了一个类似这样的课程

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

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

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中的字段。我无法看到VisualContentCtalinkitem的任何输入字段。

如果我将RichContent的声明更改为:

class RichContent (VisualContent, SimpleContent, Ctalinkitem):

然后我只能看到来自VisualContent的字段。

我想知道我是否采取了正确的方法?有什么解决方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您需要在panels上提供明确的RichContent定义,可能类似于:

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

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