【发布时间】:2022-01-05 14:33:59
【问题描述】:
这是一个理论问题,我想将其重新应用到我自己的研究中。但是,假设我有三个模型:
class Person(models.Model)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
class Teacher(Person)
teacher_id = models.IntegerField()
class Student(Person)
student_id = models.IntegerField()
我可以设置哪些数据库/模型限制以确保不能使用相同的 Person 父级创建来自两个子级的实例。
另外,可能没有使用最好的示例,但假设 Person 也可以显式创建。
注意:显然我可以在保存时做一个小检查,但希望得到更“Pythonic”的东西
更新(进一步定义)
注意:这只是为了证明孩子可以共享同一个父母。
假设我们有一个Person。
>>> person = Person.objects.create(first_name="Joe", last_name="Bloggs")
>>> person
<Person: Person object (1)>
然后我们创建一个Student。
>>> student = Student.objects.create(first_name="Joe", last_name="Bloggs", student_id=1234)
>>> student
<Student: Student object (1)>
同时创建一个Teacher
>>> teacher = Teacher.objects.create(first_name="Joe", last_name="Bloggs", teacher_id=12)
>>> teacher
<Teacher: Teacher object (1)>
我可以将教师和学生都分配给人员实例。像这样:
>>> person.teacher = teacher
>>> person.student = student
>>> person.student
<Student: Student object (7)>
>>> person.teacher
<Teacher: Teacher object (7)>
在某些情况下,Student 也可能是 Teacher。但是,在我的特定场景中,Person 不能同时是 Student 和 Teacher。
【问题讨论】:
-
@Sumithran 在哪里?我没有其他模特/关系。
-
从老师到人,学生到人等等
标签: python mysql django django-models