FeinCMS管理员内联

时间:2011-03-26 19:30:59

标签: django content-management-system django-admin feincms

我是FeinCMS的新手,我正在尝试创建自己的内容类型。这使用了我创建的另一种自定义内容类型。

在下面的代码中,“CollapsiblePanel”未在管理员中显示,因为我只希望您能够从ContentBox部分创建“CollapsiblePanels”。

您还可以为每个ContentBox创建多个CollapsiblePanel。我无法弄清楚如何将它们连接在一起,因此管理员允许您在ContentBox中添加CollapsiblePanels

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),
       })

1 个答案:

答案 0 :(得分:2)

如果您应该能够按CollapsiblePanel多个ContentBoxMedia,那么您的关系设置错误 - ForeignKey应该在CollapsiblePanel

然而,您所追求的似乎是自动处理CollapsiblePanel“内联”?这不是开箱即用的,因为FeinCMS将所有内容类型作为内联处理(因此ContentBoxMedia对象已经作为父对象的内联处理),并且Django不支持nested inlines

我怀疑提供此类功能的任何黑客都会非常复杂;您可以尝试在ContentBoxMedia模板中呈现自己的formset,但是您需要破解ItemEditor.change_view方法来处理数据,这将无法轻松完成。或者,您可以通过采用Ajax方法来避免这种情况,但这只能在已保存的 ContentBoxMedia对象中运行,而不是新对象。

或者您可以尝试直接向管理员注册ContentBoxMedia以便您可以使用CollapsiblePanel内联,但这需要离开主要的FeinCMS父管理页面来单独编辑这些内容。如果您想要探索此问题,则需要使用Base.content_type_for并使用AdminSite注册结果模型(当然还要明确注册内联)。