我是FeinCMS新手,我正在尝试创建自己的内容类型。它使用我创建的另一个自定义内容类型。
在下面的代码中,"CollapsiblePanel“没有显示在管理中,因为我只希望您能够从ContentBox部分创建"CollapsiblePanels”。
您还可以为每个CollapsiblePanels创建多个ContentBox。我很难弄清楚如何将这些连接在一起,所以管理员允许您在ContentBox中添加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),
})发布于 2011-03-26 20:35:04
如果您应该能够在每个CollapsiblePanel中设置多个ContentBoxMedia,那么您的关系就会被错误地设置-- ForeignKey应该在CollapsiblePanel中。
然而,似乎您想要的是自动处理您的CollapsiblePanel“内联”?这是行不通的,因为FeinCMS将所有内容类型作为内联处理(因此ContentBoxMedia对象已经作为父对象的内联处理),而Django不支持 inlines。
我怀疑提供这种功能的任何黑客都会非常复杂;您可以尝试在ContentBoxMedia模板中呈现您自己的表单集,但是您需要破解ItemEditor.change_view方法来处理数据,这将不容易操作。或者,您可以通过采用Ajax方法来避免这种情况,但这只能在保存的ContentBoxMedia对象中工作,而不是在新对象中工作。
或者,您可以尝试直接向admin注册ContentBoxMedia,以便您可以使用CollapsiblePanel内联,但这需要保留主FeinCMS父管理页面来单独编辑这些内容。如果您想探究这一点,您将需要使用Base.content_type_for并将结果模型注册到您的AdminSite (当然,还需要显式地注册一个内联)。
https://stackoverflow.com/questions/5444763
复制相似问题