我是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),
})
答案 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
注册结果模型(当然还要明确注册内联)。