假设我们有一个带有两个自递归关系的模型:
class Article(Item): # Item in this case is an abstract class
date = models.DateField()
parent = models.OneToOneField('self', null=True, blank=True)
subatricles = models.ForeignKey('self', null=True, blank=True, related_name='subs')
文章在这里作为节点 - 它可以有许多子节点(如果提供)和一个父节点(如果有的话)。但是,当我在Django的管理员中注册我的模型时,我的子系统显示为“一对一” - 在这两种情况下都有选择框,但在后者中,不能选择多个值。
如何通过管理窗格将子项添加到此Article对象,然后列出它们?
我想要的是: <{0}}而不是正常的下拉列表。
感谢。
答案 0 :(得分:6)
您只需要一个字段父 subarticles 作为related_name来提供反向查找:
class Article(Item): # Item in this case is an abstract class
date = models.DateField()
parent = models.ForeignKey('self', null=True, blank=True, related_name='subarticles')
因此,如果您有一个文章对象并且想要获取其父文件,请使用:
article.parent
如果你想要孩子,你可以使用:
article.subarticles
在显示子文章的管理界面中,最简单的方法是使用InlineModelAdmin:
class ArticleInline(admin.StackedInline):
model = Article
class ArticleAdmin(admin.ModelAdmin):
inlines = [
ArticleInline,
]