【问题标题】:Django Admin Changing Inline Admin Form based on class typeDjango Admin 根据类类型更改内联管理表单
【发布时间】:2011-07-19 23:50:01
【问题描述】:

我在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 模型的更改表单似乎需要特别考虑。有关如何处理此问题的任何建议?

【问题讨论】:

    标签: python django django-admin django-templates


    【解决方案1】:

    事实证明,如果您使用 django-model-utils 并进行继承。然后,您可以为每个子类添加内联。 Django 管理员会弄清楚的。它将显示该类的正确表单。

    问题解决了。

    【讨论】:

    • 很高兴了解方便的 Django 模块。里面有一些有用的助手。
    • @GeraldKaszuba 很高兴它对你有帮助。
    猜你喜欢
    • 2019-07-29
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2011-07-11
    • 2015-10-19
    相关资源
    最近更新 更多