【问题标题】:FeinCMS admin inlinesFeinCMS 管理员内联
【发布时间】:2011-03-26 19:30:58
【问题描述】:

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

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

您还可以为每个 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),
       })

【问题讨论】:

  • 这段代码似乎有两个问题。首先, CollapsiblePanel 的 ForeignKey 可能是错误的——从你的描述来看,它应该是相反的。其次,不能在内联内使用内联编辑——stock Django 不允许这样做,因此 FeinCMS 也不允许。
  • 哈哈;正如我刚才在回答中所解释的那样......嗨,马蒂亚斯 :)

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


【解决方案1】:

如果每个ContentBoxMedia 应该能够有多个CollapsiblePanels,那么您的关系设置错误——ForeignKey 应该在CollapsiblePanel 中。

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

我怀疑任何提供此类功能的 hack 都会非常复杂;您可以尝试在ContentBoxMedia 模板中呈现您自己的表单集,但您需要破解ItemEditor.change_view 方法来处理数据,这并不容易。或者,您可以通过采用 Ajax 方法来避免这种情况,但这仅适用于 saved ContentBoxMedia 对象而不是新对象。

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

【讨论】:

  • 感谢您的回复。这是我想出的,但现在我遇到了渲染问题。 Pastebin Code 渲染问题是 feincms 不会渲染我从下拉列表中选择的内容。我不确定我的渲染函数应该是什么样子。
  • 你能提供一个简单的例子来说明我会怎么做吗? Base.content_type_for
  • 这是一个文档链接,里面有一个简单的使用示例。 x = MyBaseModel.content_type_for(ContentBoxMedia) 然后 admin.site.register(x) 或类似的。但是不要在这上面浪费时间,除非你很确定你理解它的含义。您更新的示例模型似乎不是抽象的,这意味着它无论如何都不能用作 FeinCMS 内容类型。
猜你喜欢
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 2013-03-01
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多