Django:使用ManyToManyField计数查询?

时间:2010-12-29 17:31:39

标签: python django

在Django中,如何为ManyToManyField构造COUNT查询?

我的模型如下,我想让所有名字以A开头并且至少是一个地方的领主或霸主的人,并按名称订购结果。

class Manor(models.Model):
    lord = models.ManyToManyField(Person, null=True, related_name="lord")
    overlord = models.ManyToManyField(Person, null=True, related_name="overlord")
class Person(models.Model):
    name = models.CharField(max_length=100)

所以我的查询应该看起来像这样......但我如何构建第三行?

people = Person.objects.filter(
       Q(name__istartswith='a'), 
       Q(lord.count > 0) | Q(overlord.count > 0) # pseudocode
).order_by('name'))

2 个答案:

答案 0 :(得分:1)

实际上,这不是你对此感兴趣的计数,而是该关系中是否有任何成员。

Q(lord__isnull=False) | Q(overlord__isnull=False) 

答案 1 :(得分:0)

在这种情况下,更好地诉诸raw SQL

for p in Person.objects.raw('SELECT * FROM myapp_person WHERE...'):
    print p