【发布时间】:2020-10-04 12:12:16
【问题描述】:
我正在建立一个有教师和学生的网站。我使用默认的 Django 用户模型,最初忽略了教师并将我的所有用户视为学生。今天我开始尝试将我的用户分为教师和学生,并且遇到了很多困难。我显然缺少一些基础知识,并且在网上阅读了很多内容,但我在兜圈子。
一个老师可以有很多学生,一个学生可以有一个老师。
首先,我认为 Id 需要单独的 Student 和 Teacher 模型。所以现在每个人都是用户,我将为每个人附加一个学生或教师模型(这是马虎吗?)。
现在是关系。我尝试在他们自己的模型中创建教师和学生之间的关系,但没有奏效,所以我认为我需要一个单独的 TeacherStudentRelationship 类来保存这些关系。
这是我目前的实现:
class Student(models.Model):
student = models.OneToOneField(User, on_delete=models.CASCADE)
def __str__(self):
return f'{self.student.username}'
class Teacher(models.Model):
teacher= models.OneToOneField(User, on_delete=models.CASCADE)
def __str__(self):
return f'{self.teacher.username}'
class TeacherStudentRelationship(models.Model):
student = models.ForeignKey(User, on_delete=models.CASCADE)
teacher = models.OneToOneField(User, on_delete=models.CASCADE)
这不会引发任何错误,尽管在 Django Admin 中我可以创建多个 TeacherStudentRelationship 实例并在多个实例中将学生分配给老师(应该只能将学生分配给老师一次)。即使关系是一对多的,我也只能在一个实例中将一个学生分配给一个老师。
我的实施也有问题。每次创建用户时,我都会触发一个信号,该信号会生成一个学生模型并将其与用户链接。当我有学生在我的网站上注册时,这很好,尽管这意味着我的管理员也需要一个学生模型(否则它会引发错误)。我还计划在 Django 管理面板中创建教师,但这也会导致问题,因为他们需要学生模型。你将如何实现它?
谢谢。
【问题讨论】:
标签: python django django-models django-users