2011-11-30 84 views
4

我有2個模型如下。現在我需要在Model B的頁面上內嵌模型A.Django反向內聯Admin

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] 

是可能的?如果是,請讓我知道..

+0

如果這真的是你需要的,也許你需要重新考慮你的FKS – juliomalegria

回答

3

不,因爲A需要有一個ForeignKey到B被用作內聯。否則,一旦保存內聯A,關係將如何記錄?

+0

感謝您的回覆Pastylegs .. – Gathole

+0

有如此另一種方式我可以在模型B的頁面上顯示模型A的字段? – Gathole

+1

如果你真的需要它,並且你確定你的關係是正確的(即正確的ForeignKeys等),你可以覆蓋B頁面的管理模板並手動寫入A的表單。或者,你可以在A和B之間創建一個通用的外鍵,但這會改變A的含義(即說允許A與任何未指定的對象相關) –

1

你不能像timmy O'Mahony所說的那樣做。但是如果你願意的話,你可以讓B在A內嵌入。或者,也許你可以操縱Django是如何在

顯示其高清的unicode(個體經營):

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)