2012-12-11 70 views
21

這是一個重複的問題,但我找不到任何其他人。我正在嘗試獲取有投訴的照片列表。我不能簡單地接受投訴並處理相關照片 - 我需要一組照片。過濾Django對象存在相關對象

這應該工作,但看起來不正確:

Photo.objects.filter(complaint__id__gte=0) 

這似乎不是最有效的方法:

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

有沒有更好的辦法?

回答

47

怎麼樣......

Photo.objects.filter(complaint__isnull=False)

https://docs.djangoproject.com/en/dev/topics/db/queries/

+0

局長,謝謝! – Jake

+13

最後,您可能還需要一個.distinct()才能像註釋一樣複製相同內容。至少我做到了。 – Christoffer

+3

@Christoffer你救了我的命,謝謝。這是一個致命的問題,所以我想寫評論並改進重點。 –

4

我不知道什麼是最好的,但工作也是如此。

Photo.objects.exclude(complaint=None)

生成的SQL查詢在這裏是不一樣的情況下,與.filter(complaint__isnull=False),但意義是相同的。

+1

這比接受的答案要好,因爲它不需要'.distinct()'調用來處理多值關係。 – Dan