Django Admin基于类类型更改内联管理表单

时间:2011-03-21 20:35:34

标签: python django django-admin django-templates

我在previous question中询问了一些关于Django继承的问题。现在我想弄清楚如何让管理界面使用它。

如果我有这样的模特:

class ContentItem(models.Model):
    title = models.CharField(max_length=1000)
    page_order = models.IntegerField()
    last_update_date = models.DateTimeField(default=datetime.now())

    class Meta:
      abstract = True
      ordering = ['page_order', 'last_update_date', 'title']

class LinkContent(ContentItem):
  url = models.URLField()
  link_text = models.CharField(max_lenth=1000)

class TextContent(ContentItem):
 text = models.CharField()


class VideoContent(ContentItem):
      title = models.CharField()
      video_file = models.FieldField(upload_to = 'videos')

class Page(models.Model):
  contents = models.ManyToManyField(ContentItem)
  title = models.CharField()

假设我正在使用上一个问题答案中提到的django-model-utils。

如何根据子类使管理界面显示正确的内联?我想要正确的内联显示类型。所以,如果我有3个项目的内容,一些文本,一个链接和一个视频。然后,当我在管理界面中查看 Page 时,我希望看到每个项目的内联表单。

这是如何完成的?

另外,我如何处理为关系添加新内容?理想情况下,当用户想要添加新的 ContentItem 时,会询问他们需要添加哪种内容项。然后,弹出窗口中将打开该内容类型的添加表单。因此,如果我指定我想添加 VideoContent ,那么我会弹出一个允许我上传视频的弹出窗口。如果我指定我想要 TextContent ,我会弹出一个输入文本的地方。

对于Page模型的更改表单,似乎需要特别考虑。有关如何处理此问题的任何建议吗?

1 个答案:

答案 0 :(得分:0)

事实证明,如果你使用django-model-utils并继承。然后,您可以为每个子类添加内联。 Django管理员会搞清楚。它将为班级显示正确的形式。

问题解决了。