我在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模型的更改表单,似乎需要特别考虑。有关如何处理此问题的任何建议吗?
答案 0 :(得分:0)
事实证明,如果你使用django-model-utils并继承。然后,您可以为每个子类添加内联。 Django管理员会搞清楚。它将为班级显示正确的形式。
问题解决了。