2016-06-16 9 views
0

私のdjangoアプリケーション(1.8)には、TeamMemberのブール型フィールドprimary_contactUserとの外部キーの関係を持つモデルがあります。私はTeamMemberと関連のないユーザオブジェクトのセットをprimary_contact=Trueとしたいと思います。しかし、フィルタリングされた関連オブジェクトのカウントでクエリセットに注釈を付ける

User.objects.prefetch_related(Prefetch('teammember_set', queryset=.objects.filter(primary_contact=True), to_attr='primary_contacts')) 

をI:

User.objects.annotate(teammember__count=Count('teammember')) 

そして、私も簡単に十分なprimary_contact TeamMembersをプリフェッチすることができます:私は簡単に十分なチームメンバーの数を取得することができます

primary_contact=FalseTeamMembersは大丈夫です) "私はprimary_contactチームのメンバーを持っていないユーザー"によってクエリセットをフィルタリングできるようになっています。

明らかに、ORMでこれを行い、クエリを最小限に抑え、可能であれば生のSQLを使用しないでください。

答えて

1

私はあなたの質問に誤解を招くかもしれませんが、これは機能しますか?

User.objects.filter(Q(teammember__primary_contact=False) | 
        Q(teammember__isnull=True)) 
+0

興味深いことに、djangoのormがそのようなクエリを許可するということは私には起こりませんでした。それはまさに私が探していたものではありませんが、それは私にもっと近いです。 'User.objects.exclude(Q(teammember__primary_contact = True))')は有望視されています。ありがとう! –

関連する問題