过滤存在相关对象的Django对象

时间:2012-12-11 21:50:40

标签: django

这必然是一个重复的问题,但我找不到任何其他问题。我正在尝试获取有投诉的照片列表。我不能简单地投诉并处理相关照片 - 我需要一组照片查询。

这应该有效,但似乎不对:

Photo.objects.filter(complaint__id__gte=0)

这似乎不是最有效的方式:

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:62)

怎么样......

Photo.objects.filter(complaint__isnull=False)

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

答案 1 :(得分:7)

我不确定哪种变体是最好的,但也可以。

Photo.objects.exclude(complaint=None)

此处生成的SQL查询与.filter(complaint__isnull=False)的情况不同,但感觉相同。