Django Admin根据类的类型更改内联管理员表单

我在前一个问题中询问了有关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。

我将如何使管理界面基于子类显示正确的内联? 我想要正确的内联显示类型。 所以如果我有三项内容,一些文字,一个链接和一个视频。 然后,当我在管理界面中查看该页面时,我想查看每个项目的内联表单。

这是如何完成的?

另外,我将如何处理向关系添加新事物? 理想情况下,当用户想要添加新的ContentItem时,会询问他们需要添加什么样的内容项目。 然后,该内容类型的添加表单将在弹出窗口中打开。 所以如果我指定我想添加VideoContent,那么我会弹出一个让我上传视频的视频。 如果我指定了我想要的TextContent,我会弹出一个输入文本的位置。

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


所以事实证明,如果你使用django-model-utils并且继承。 然后,您可以为每个子类添加内联。 Django管理员将解决它。 它将显示课堂的正确形式。

问题解决了。

链接地址: http://www.djcxy.com/p/65419.html

上一篇: Django Admin Changing Inline Admin Form based on class type

下一篇: add extra tickboxes for use with action dropdown