2010-12-29 13 views
1

Djangoでは、ManyToManyFieldのCOUNTクエリを作成するにはどうすればよいですか?Django:ManyToManyFieldカウントのクエリ?

私のモデルは以下の通りです。名前がAで始まり、少なくとも1つのプレイスの大将または大将であるすべての人物を取得し、結果を名前で注文したいと考えています。

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) 

私のクエリは次のようになりますが、3行目はどのように構成しますか?

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

答えて

1

実際には、ここで興味を持っているのではなく、その関係にメンバーがあるかどうかだけです。

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

非常にスマート、ありがとう! – AP257

0

この場合、raw SQLの方がよい。

for p in Person.objects.raw('SELECT * FROM myapp_person WHERE...'): 
    print p 
関連する問題