gpt4 book ai didi

python - ParentalKey 未链接到 Wagtail CMS 中的所有子类

转载 作者:太空宇宙 更新时间:2023-11-03 17:44:15 24 4
gpt4 key购买 nike

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

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

例如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 的字段。

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

最佳答案

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

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

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

关于python - ParentalKey 未链接到 Wagtail CMS 中的所有子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30041825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com