在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'))
答案 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