在Django Admin中反转内联
我有两个模型,分别是模型A和模型B。现在我想把模型A直接放到模型B的页面上。
这是模型的代码:models.py
class A(models.Model):
name = models.CharField(max_length=50)
class B(models.Model):
name = models.CharField(max_length=50)
a = models.ForeignKey(A)
这是管理后台的代码:admin.py
class A_Inline(admin.TabularInline):
model = A
class B_Admin(admin.ModelAdmin):
inlines = [A_Inline]
这样做可以吗?如果可以的话,请告诉我。
3 个回答
1
当然可以这样做。每种关系,不管是一对一、一对多还是外键,都会有一个反向访问器。关于外键的反向访问,可以在这里了解更多。
class A_Inline(admin.TabularInline):
model = A.b_set.through
class B_Admin(admin.ModelAdmin):
inlines = [A_Inline]
1
你不能按照timmy O'Mahony说的那样做。不过,如果你想的话,可以把B放在A里面。或者你也可以调整Django的显示方式,具体可以在下面的代码中进行设置:
def unicode(self):
models.py
class A(models.Model):
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name
class B(models.Model):
name = models.CharField(max_length=50)
a = models.ForeignKey(A)
admin.py
class B_Inline(admin.TabularInline):
model = B
class A_Admin(admin.ModelAdmin):
inlines = [
B_Inline,
]
admin.site.register(A, A_Admin)
admin.site.register(B)
或者你可能想使用多对多的关系?
models.py
class C(models.Model):
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name
class D(models.Model):
name = models.CharField(max_length=50)
cs = models.ManyToManyField(C)
admin.py
class C_Inline(admin.TabularInline):
model = D.cs.through
class D_Admin(admin.ModelAdmin):
exclude = ("cs",)
inlines = [
C_Inline,
]
admin.site.register(C)
admin.site.register(D, D_Admin)
0
不可以,因为A需要有一个指向B的外键,这样才能作为一个内联使用。否则,当你保存内联的A时,怎么记录它们之间的关系呢?