2011-09-09 19 views
0

私はDjangoで豊富な経験を持っていますが、私は管理アプリケーション(私たちは通常、プロジェクトの要件に応じてすべてをページに組み込みます)にはとても新しいです。Django admin 'は関係です

しかし、私はいくつかの管理作業を必要とするプロジェクトに取り組んでいます。私は1つの部分で立ち往生しています。

は、私はデータベースのモデルを持っていると言う - 人、学生、教員

両学部の学生は、人(彼らはいわば、それらの属性を継承する「)」です。これを管理画面でどのように表示できますか?

誰かが学生を追加するときにクリックすると、学生専用の属性に加えて、同じページに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

よく試みましたが、エラーが発生しました: Fernker

+0

にForeignKeyがありません申し訳ありません。私の間違い!私はうんざりした方法で作った!やってみよう! –

+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() 

この方法では、学生の管理ページで、あなたはすべてを取得しますStudentからPersonまでのフィールドはInlinesなしです。また、Djangoは2つのテーブル間のForeignKeyを自動的に処理します。

Docs on Model inheritance