2012-12-11 4 views
21

これは重複した質問になることがありますが、他のものは見つかりません。私は苦情のある写真のリストを取得しようとしています。私は単に苦情を受け取り、関連する写真を扱うことはできません - 私は写真のクエリーセットが必要です。関連するオブジェクトが存在するDjangoオブジェクト

これは動作するはずですが、右のようではありません。

Photo.objects.filter(complaint__id__gte=0) 

これが最も効率的な方法のように見えるしていません:

Photo.objects.annotate(Count('complaint')).exclude(complaint__count=0) 

は、より良い方法はありますか? https://docs.djangoproject.com/en/dev/topics/db/queries/

答えて

47

か...

Photo.objects.filter(complaint__isnull=False)

は、私は何が最善かわからないんだけど、それは同様に動作します。ここ

Photo.objects.exclude(complaint=None)

生成されたSQLクエリは.filter(complaint__isnull=False)の場合と同じではありませんが、意味は同じです。

+0

ありがとうございます! – Jake

+13

注釈と同じものを複製するには、最後に.distinct()が必要な場合もあります。少なくとも私はしました。 – Christoffer

+3

@Christofferあなたは私の人生を保存しました、ありがとうございます。それは致命的な問題ですので、私はコメントを書いて強調したいと思います。 –

4

+1

多値の関係を扱うために '.distinct()'コールを必要としないので、これは受け入れられた答えより優れています。 – Dan

関連する問題