Django管理后台根据类类型更改嵌套表单
我之前在一个问题中问过关于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个项目:一些文本、一个链接和一个视频。那么当我在管理界面查看那个页面时,我希望能看到每个项目的内联表单。
这个怎么实现呢?
另外,我该如何处理向关系中添加新内容呢?理想情况下,当用户想添加一个新的内容项时,他们应该被问到需要添加什么类型的内容项。然后那个内容类型的添加表单会在弹窗中打开。所以如果我指定想添加视频内容,我就会看到一个弹窗让我上传视频。如果我指定想要文本内容,我就会看到一个弹窗让我输入文本。
看起来在处理页面模型的更改表单时需要特别注意。有什么建议来解决这个问题吗?
1 个回答
0
原来,如果你使用django-model-utils这个工具,并且进行继承的话,就可以为每个子类添加内联表单。Django的管理后台会自动识别这些内容,并显示出对应的表单。
问题解决了。