所以我试图创建以下类型的关系:
老师有很多学生,学生有很多老师,学生有很多(2)家长,家长有很多学生。
让我困惑的是我试图用AbstractUser的扩展来存档它。我完全不知道如何创建模型。目前我有这个:
class User(AbstractUser):
is_student = models.BooleanField(default=False)
is_teacher = models.BooleanField(default=False)
is_parent = models.BooleanField(default=False)
class Student(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
parent = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='parents'
)
class Parent(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
student = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='students'
)
class Teacher(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
student = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='students'
)
我觉得你在这里过于复杂。我认为不需要所有这些模型和一对一的关系。为什么不是一个简单的用户模型与所有关系?
class User(AbstractUser):
students = models.ManyToManyField('self', related_name='teachers', symmetrical=False)
children = models.ManyToManyField('self', related_name='parents', symmetrical=False)
注意,相关名称是反向关系;如果你是我的学生之一,我是你的老师。您不需要单独的字段。你确实需要将对称设置为False - 否则Django会假设你是我的学生之一,我是你的学生之一,这显然是不对的。