2011-03-26 62 views
3

我是FeinCMS的新手,我正嘗試創建自己的內容類型。這使用我創建的另一個自定義內容類型。FeinCMS管理員內嵌

在下面的代碼中,「CollapsiblePanel」未顯示在管理員中,因爲我只希望您能夠從ContentBox部分創建「CollapsiblePanels」。

您也可以爲每個ContentBox創建多個CollapsiblePanel。我無法搞清楚如何把這個在一起,使管理員可以讓你添加ContentBox

class CollapsiblePanel(models.Model): 
    title = models.CharField(max_length=255) 
    content = models.TextField() 

    def render(self, **kwargs): 
     return render_to_string('collapsiblepanel.django.html', { 
      'media': self, 
      'title': mark_safe(self.title), 
      'text': mark_safe(self.content), 
     }) 

class ContentBoxMedia(RichTextContent): 
    title = models.CharField(_('title'), max_length=200, blank=True) 
    collapsible = models.BooleanField() 
    collapsiblePanels = models.ForeignKey(CollapsiblePanel) 

    class Meta: 
     abstract = True 
     verbose_name = 'Content Box' 
     verbose_name_plural = 'Content Box' 

    def render(self, **kwargs): 
     return render_to_string('contentbox.django.html', { 
      'media': self, 
      'title': mark_safe(self.title), 
      'text': mark_safe(self.text), 
     }) 
+0

看來這個代碼有兩個問題。首先,CollapsiblePanel的ForeignKey可能是錯誤的 - 它應該是從你的描述中判斷的另一種方式。其次,不能使用內聯內聯進行編輯 - 股票Django不允許這樣做,因此FeinCMS也沒有。 – 2011-03-26 20:18:17

+0

哈哈;正如我剛纔在我的回答中解釋的那樣... Hi Matthias :) – DrMeers 2011-03-26 20:37:37

回答

2

內CollapsiblePanels如果您應該能夠每ContentBoxMedia有多個CollapsiblePanel S,你的關係是建立錯誤的方式 - ForeignKey應改爲CollapsiblePanel

但是,看起來您所要做的是自動處理CollapsiblePanel「inline」嗎?這不會開箱即用,因爲FeinCMS將所有內容類型處理爲內聯(所以ContentBoxMedia對象已經作爲父對象的內聯處理),並且Django不支持nested inlines

我懷疑任何黑客提供這種功能將是非常複雜的;您可以嘗試在ContentBoxMedia模板中呈現您自己的表單集,但是您需要破解ItemEditor.change_view方法來處理數據,這很不容易。或者,你可以通過採用Ajax方法避免這種情況,但這隻能在保存的ContentBoxMedia對象中使用,而不是新的。

或者,您可以嘗試直接向管理員註冊ContentBoxMedia,以便您可以使用CollapsiblePanel內聯,但這需要讓主FeinCMS父管理頁面單獨編輯這些內聯。如果你想探索這個,你需要使用Base.content_type_for並註冊結果模型AdminSite(當然,明確註冊一個內聯)。

+0

謝謝你的回覆。這是我想出的,但現在我有一個渲染問題。 [Pastebin Code](http://pastebin.com/wC58qgy0)呈現問題是feincms不會呈現我從下拉列表中選擇的內容。我不確定我的渲染函數應該是什麼樣子。 – Jeremy 2011-03-27 22:55:32

+0

你能提供一個簡單的例子,說明我會如何做到這一點? [Base.content_type_for](http://www.feinheit.ch/media/labs/feincms/contenttypes.html#obtaining-a-concrete-content-type-model) – Jeremy 2011-03-28 00:04:27

+0

這是一個鏈接到文檔,它有一個簡單的用法示例。 'x = MyBaseModel.content_type_for(ContentBoxMedia)'然後'admin.site.register(x)'或類似的。但是不要浪費時間,除非你確信你明白它的含義。您更新的示例模型似乎不是抽象的,這意味着無論如何它都不能用作FeinCMS內容類型。 – DrMeers 2011-03-28 04:35:50