Django:使用inlineformset在线编辑相关模型

时间:2010-10-07 11:51:45

标签: django django-admin inline-formset

我仍然坚持使用同一页面上的相关模型的内联树状结构。 我有三个型号,A,B和C.

Class A

Class B
    fb = foreignkey(A)

Class C
    fc = foreignkey(B)

在admin.py中,我正在做类似

的事情
AdminA
    inlines = [inlineB]

AdminB
    inlines = [inlineC]

我希望在编辑/添加模型A时,我应该能够添加ModelB内联,并添加模型B的相关模型C条目。我正在尝试使用inlineformsets,但无法找到如何将它们用于我的目的。而且,我找到了this old discussion on same problem。但同样,由于我是Django的新手,我不知道如何让它发挥作用。

1 个答案:

答案 0 :(得分:2)

回答你自己的问题有点奇怪,但是没有其他人加强。感谢Bernd指出我正确的方向。该解决方案需要制作中间模型。在我的案例中BC类。

class A(models.Model):                                        
a = models.IntegerField()                                 


class B(models.Model):                                        
    fb = models.ForeignKey(A)                                 
    b = models.IntegerField()                                 

class C(models.Model):                                        
    fc = models.ForeignKey(B)                                 
    c = models.IntegerField()                                 

class BC(models.Model):                                       
    fc = models.ForeignKey(A)                                 
    fb = models.ForeignKey(B)                                 

而不是在模型A的Admin中使用InlineB,而是使用BC的内联。所以完整的admin.py看起来像。

class InlineC(admin.TabularInline):
    model = C
    extra = 1

class BCInline(admin.TabularInline):
    model = BC
    extra = 1

class AdminA(admin.ModelAdmin):
    fieldsets = [
        (None, {
            'fields': ('a',)
            }),
        ]
    inlines = [BCInline]

class AdminB(admin.ModelAdmin):
    fieldsets = [
        (None, {
            'fields': ('b',)
            }),
        ]
    inlines = [InlineC]

瞧,在模型A的添加页面中,我获得了popus创建B的完整对象的按钮。