las*_*hla 2 django django-admin
假设我们有一个具有两个自递归关系的模型:
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')
Run Code Online (Sandbox Code Playgroud)
文章在这里作为节点 - 它可以有许多孩子(如果提供)和一个父母(如果有的话).但是,当我在Django的管理员中注册我的模型时,我的子系统被显示为"一对一" - 在这两种情况下都有选择框,但在后者中,不能选择多个值.
如何通过管理窗格将子项添加到此Article对象,然后列出它们?
我想拥有的是:
而不是正常的下拉.
谢谢.
您只需要一个具有subarticles的字段parent作为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')
Run Code Online (Sandbox Code Playgroud)
因此,如果您有一个文章对象并且想要获取其父对象,请使用:
article.parent
Run Code Online (Sandbox Code Playgroud)
如果你想得到它的孩子,你使用:
article.subarticles
Run Code Online (Sandbox Code Playgroud)
在管理界面来显示subarticles最简单的方法是使用InlineModelAdmin:
class ArticleInline(admin.StackedInline):
model = Article
class ArticleAdmin(admin.ModelAdmin):
inlines = [
ArticleInline,
]
Run Code Online (Sandbox Code Playgroud)