2011-09-09 85 views
0

我在Django有很多經驗,但我對管理應用程序很陌生(我們通常根據項目需求將所有內容都構建到頁面中)。Django admin'是'關係

但是現在我正在開發一個項目,需要一些管理員工作,並且我被困在一個部分。

說我有數據庫模型 - 人,學生,教師

教職員與學生是一個'人(他們繼承這些屬性可以這麼說)。我怎樣才能在管理員視圖中顯示?

因此,當有人點擊添加學生時,他們填寫學生唯一的屬性,但也需要在相同頁面上的Person模型的屬性。這可能嗎?

這裏的車型,也有教師,但它類似於學生

class Person(models.Model): 
    last_name = models.CharField(max_length=50) 
    first_name = models.CharField(max_length=50) 
    mi = models.CharField(max_length=50) 
    phone = models.CharField(max_length=20) 
    cell = models.CharField(max_length=20) 



class Student(models.Model): 
    year = models.CharField(max_length=10) 
    stud_id = models.IntegerField() 
    person = models.ForeignKey(Person) 
    #many to many 

任何意見或其他問題將是真棒!

回答

2

InlineModelAdmin是你的答案! 檢查出來!

這裏是你需要的代碼:

class StudentInline(admin.TabularInline): 
    model = Student 

class PersonAdmin(admin.ModelAdmin): 
    inlines = [ 
     StudentInline, 
    ] 

admin.site.register(Person,PersonAdmin) 
+0

嗯,我試過了,我得到一個錯誤: 沒有ForeignKey Fernker

+0

對不起。我的錯!我以相反的方式做出了!現在就試試! –

+0

偉大的,似乎是我所需要的。 – Fernker

1

另一種方法是使用這樣的Django模型繼承:

class Person(models.Model): 
    last_name = models.CharField(max_length=50) 
    first_name = models.CharField(max_length=50) 
    mi = models.CharField(max_length=50) 
    phone = models.CharField(max_length=20) 
    cell = models.CharField(max_length=20) 

class Student(Person): 
    year = models.CharField(max_length=10) 
    stud_id = models.IntegerField() 

這樣,在學生管理頁面,你會得到一切StudentPerson而不是Inlines。此外,Django將自動處理兩個表之間的ForeignKey。

Docs on Model inheritance