如何访问一对多关系中的多个字段

How To Access Many Field In One-To-Many Relationship

我有两种不同的用户类型,教师和学生。我的学生与老师有一对多的关系(一个学生可以有一个老师/一个老师可以有很多学生)。我可以在这样的模板中访问学生的教师 user.student.teacher,但我不知道如何访问教师的学生列表?

# override default User model
class User(AbstractUser):
    user_type = models.CharField(choices=USER_TYPES, max_length=255, default='student')

class Teacher(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE, default=None, null=True)

谢谢。

简单

user.teacher.student_set.all()

参考:

  • What is related_name used for in Django?

Django 自动允许您访问其他方式,默认情况下名称管理器 student_set。注意,型号名称后跟 _set。您可以通过在 ForeignKey.

中设置 related_name 来覆盖此名称

深入学习here

  • 可以查询,teacher.student_set.all()这会显示老师的所有学生

  • 你也可以这样用related_name,

class Student(models.Model):
    ...
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE, default=None, null=True, related_name='students')

然后这样查询,teacher.students.all()