2015-05-04 73 views
1

我已經建立3抽象模型類: SimpleContent(只保留標題,副標題和總結基於所有文本。) VisualContent(圖像,富文本字段) Ctalinkitem(用於添加一個URL,可能是一個頁面,外部或文檔)ParentalKey沒有鏈接到鶺鴒所有子類CMS

我想創建另一個類,可以包括這些類的組合來形成一個'模塊'類。

例如RichContent將有他們的所有3 TextLinkContent會有簡單文本和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到declaratioon:

class RichContent (VisualContent, SimpleContent, Ctalinkitem): 

那麼我只能看到從場VisualContent

我在想我是否正在做正確的做法?有沒有解決方法來解決這個問題?

+0

謝謝@michaelpri。對不起,這是我第一次在這裏發佈,下次我會更加關注。 – DSO

回答

1

你需要在RichContent提供一個明確的定義panels,可能是這樣的:

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

鶺鴒能夠自動生成在某些情況下,面板的定義,但是這是相當有限的(例如,它不識別頁面選擇器面板) - 特別是,如果您的每個超類都已經有panels定義,那麼它不會自動將它們組合到一個列表中。相反,您在這裏看到的是Python的多重繼承規則,它導致第一個超類的panels屬性覆蓋後者。

+0

它的工作原理!謝謝@gasman。我不知道第一個超類的面板被覆蓋了。爲了實現這樣的功能,我使用正確的方法嗎?還是有其他解決方案嗎?我想有一些預定義的前端面板,其中將包括不同類別的組合) – DSO