Python 3&Django Rest Framework-如何查询M-1-M模型?

问题描述 投票:1回答:1

我有这些模型:

  • 组织

  • 学生

  • 课程

  • 注册

学生属于组织

一个学生可以注册一门或多门课程

因此,入学记录基本上由给定的课程和给定的学生组成

class Organisation(TimeStampedModel):
  objects = models.Manager()
  name = models.CharField(max_length=50)

  def __str__(self):
    return self.name

class Student(TimeStampedModel):
  objects = models.Manager()
  first_name = models.CharField(max_length=50)
  last_name = models.CharField(max_length=50)
  email = models.EmailField(unique=True)
  organisation = models.ForeignKey(to=Organisation, on_delete=models.SET_NULL, default=None, null=True)

  def __str__(self):
    return self.email

class Course(TimeStampedModel):
  objects = models.Manager()
  language = models.CharField(max_length=30)
  level = models.CharField(max_length=2)

  def __str__(self):
    return self.language + ' ' + self.level

  class Meta:
    unique_together = ("language", "level")

class EnrollmentManager(models.Manager):
  def org_student_count(self, organisation):
    return self.filter(student__organisation__name="AEKI").count()

class Enrollment(TimeStampedModel):
  objects = EnrollmentManager()
  course = models.ForeignKey(to=Course, on_delete=models.CASCADE, default=None, null=False)
  student = models.ForeignKey(to=Student, on_delete=models.CASCADE, default=None, null=False)
  enrolled = models.DateTimeField()
  last_booking = models.DateTimeField()
  credits_total = models.SmallIntegerField(default=10)
  credits_balance = models.DecimalField(max_digits=5, decimal_places=2)

考虑到组织ID,我知道我可以为一个学生注册,就像这样:

o=Organisation.objects.get(id=1)
o.student_set.all()[0].enrollment_set.all()

但是如何检索给定组织的所有注册?

例如,如果我想计算给定组织中有多少学生报名参加课程?像这样的东西:

o.student_set.enrollment_set.count()
python django django-rest-framework model django-queryset
1个回答
0
投票

您反向查询,带有:

© www.soinside.com 2019 - 2024. All rights reserved.