我在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
任何想法或进一步的问题都会很棒!
答案 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。