我有3个模型用户,学生和老师。
class User(..):
username=..
firstname=..
more_fields..
class Student(..):
user = models.OneToOneField(User, ..)
a = ..
more_fields....
class Teacher(..):
user = models.OneToOneField(User, ..)
b = ..
more_fields.....
在管理员方面,我希望显示学生和教师模型,以便在添加新学生/教师时填写用户表字段,即添加学生表单用户模型堆叠在它下面。我在使用内联时遇到错误 用户模型没有学生模型的外键
**Add Student form**
a <input_field>
more_student_related_fields
username <input_field>
firstname <input_field>
more_user_related_fields
同样适用于添加教师表单
答案 0 :(得分:0)
您应该使用inline model admin
在admin.py
:
class StudentInline(admin.StackedInline):
model = Student
class TeacherInline(admin.StackedInline):
model = Teacher
class UserAdmin(admin.ModelAdmin):
inlines = (StudentInline, TeacherInline)
admin.site.register(User, UserAdmin)
修改强>
要将用户模型分别堆叠在Student和Teacher模型下方,您必须更改结构如下:
models.py
中的:
class Student(models.Model):
...
class Teacher(models.Model):
...
class User(models.Model):
student = models.OneToOneField(Student, on_delete=models.CASCADE, null=True)
teacher = models.OneToOneField(Teacher, on_delete=models.CASCADE, null=True)
...
然后在admin.py
:
class TeacherUserInline(admin.StackedInline):
model = User
exclude = ('student',)
class StudentUserInline(admin.StackedInline):
model = User
exclude = ('teacher',)
class TeacherAdmin(admin.ModelAdmin):
inlines = (TeacherUserInline,)
class StudentAdmin(admin.ModelAdmin):
inlines = (StudentUserInline,)
admin.site.register(Teacher, TeacherAdmin)
admin.site.register(Student, StudentAdmin)