Django admin'是'关系'

时间:2011-09-09 22:44:51

标签: django django-admin

我在Django有很多经验,但我对管理应用程序很新(我们通常根据项目要求在页面中构建所有内容)。

但是现在我正在开展一个需要管理工作的项目,而且我被困在一个部分。

说我有数据库模型 - 人,学生,教师

教师和学生'都是'人(他们可以继承这些属性)。如何在管理视图中显示此内容?

因此,当有人点击添加学生时,他们会填写仅限学生的属性,但也需要在同一页面上填写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 个答案:

答案 0 :(得分:2)

InlineModelAdmin是你的答案!  看看吧!

以下是您需要的代码:

class StudentInline(admin.TabularInline):
    model = Student

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

admin.site.register(Person,PersonAdmin)

答案 1 :(得分: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