我有这些模特:
class Person(models.Model):
position = models.CharField(max_length=64)
group = models.ForeignKey('Group')
class Group(models.Model):
...
现在我想要一个查询,它会返回所有不同的Group
,其中每个组中的所有人都有 worker 的位置。因此,我将让所有团体中只有工人。怎么做?
我开始时:
groups = Group.objects.filter(person__position='worker').distinct()
但是有了这个,我的团体中的人不是 worker 。
例如,我的查询应返回group1但不 group2:
group1
person1 -> position=worker
person2 -> position=worker
person3 -> position=worker
group2
person4 -> position=worker
person5 -> position=looser
person6 -> position=sleeper
答案 0 :(得分:2)
这应该有效:
Group.objects.exclude(~Q(person__position="worker"))
修改:
以上不正确,所以这是我的第二次尝试:
Group.objects.filter(
Q(person__position="worker")
& ~Q(person__position__gt="worker")
& ~Q(person__position__lt="worker")
)
我不确定这是否可以用于所有数据库。它适用于我的PGSQL安装。
答案 1 :(得分:0)
查看注释:http://docs.djangoproject.com/en/dev/topics/db/aggregation/
我无法回想起确切的语法,但是您应该能够使用position =“worker”的人数以及人员总数来注释每个Group,然后将其过滤到只有那些人的组。两个计数相等。