我有3个模型:Pupils
,Instructor
,Group
。它们通过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)
如何为Group
模型编写一个属性,该属性返回所有具有当前组学生的Instructor
个?我现在能做的最好的事情就是找到所有有学生的教师:
@property
def instructors(self):
from pupils.models import Instructor
return list(Instructor.objects.filter(pupils__isnull=False).values())
Pupils
的当前Group
计算Instructor
的数量?答案 0 :(得分:2)
我有3个模特:学生,讲师,小组。他们通过连接 学生模型如此:
这意味着您在Instructor
和Group
之间存在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'))