Django高级查询

时间:2016-08-08 14:10:15

标签: django

我有3个模型:PupilsInstructorGroup。它们通过Pupils模型连接如下:

class Pupils(models.Model):
    instructor = models.ForeignKey(Instructor, blank=True, default=None, null=True)
    group = models.ForeignKey(Group, default=None, null=True, blank=True)
  1. 如何为Group模型编写一个属性,该属性返回所有具有当前组学生的Instructor个?我现在能做的最好的事情就是找到所有有学生的教师:

    @property
    def instructors(self):
        from pupils.models import Instructor
        return list(Instructor.objects.filter(pupils__isnull=False).values())
    
  2. 如何为每个Pupils的当前Group计算Instructor的数量?

1 个答案:

答案 0 :(得分:2)

  

我有3个模特:学生,讲师,小组。他们通过连接   学生模型如此:

这意味着您在InstructorGroup之间存在M2M关系,您可以这样定义:

class Instructor:
    #...
    groups = models.ManyToManyField(Group, through='Pupils')

现在使用此M2M关系,您可以像这样instructor组:

instructor.groups.all()

您还可以使用M2M关系的reverse relation来获取群组的所有教师。

group.instructor_set.all()

您还可以使用.count()

来获取教师的数量
#group instructors count
group.instructor_set.count()
#or if you want to count pupils, 
#use the reverse relation of the ForeignKey
#group.pupils_set.count()

现在关于问题的第二部分,如果我理解正确,你需要这样的东西:

#this will give you instructors of a group with their pupils count.
group.instructor_set.annotate(pupils_count=Count('pupils'))