2011-09-09 44 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