这肯定是一个重复的问题,但我找不到其他问题。我想找一份有投诉的照片清单。我不能简单地得到投诉和处理相关的照片-我需要一个queryset的照片。这应该可以工作,但似乎不正确:
Photo.objects.filter(complaint__id__gte=0)
这似乎不是最有效的方法:
Photo.objects.annotate(Count('complaint')).exclude(complaint__count=0)
有更好的办法吗?
agxfikkp1#
不如...Photo.objects.filter(complaint__isnull=False)从https://docs.djangoproject.com/en/dev/topics/db/queries/
Photo.objects.filter(complaint__isnull=False)
gk7wooem2#
我不知道哪一个版本是最好的,但它也很好用。Photo.objects.exclude(complaint=None)生成的SQL查询与.filter(complaint__isnull=False)的情况不完全相同,但意义相同。
Photo.objects.exclude(complaint=None)
.filter(complaint__isnull=False)
7vux5j2d3#
根据关系和过滤器逻辑的复杂性,您可能需要这个 (或者这个可能会变得更易读):
complaints = Complaint.objects.filter( # some complex filter here Q(...) & Q(...) | Q(...) ) Photo.objects.annotate( has_complaints=Exists(complaints) ).filter(has_complaints=True)
3条答案
按热度按时间agxfikkp1#
不如...
Photo.objects.filter(complaint__isnull=False)
从https://docs.djangoproject.com/en/dev/topics/db/queries/
gk7wooem2#
我不知道哪一个版本是最好的,但它也很好用。
Photo.objects.exclude(complaint=None)
生成的SQL查询与
.filter(complaint__isnull=False)
的情况不完全相同,但意义相同。7vux5j2d3#
根据关系和过滤器逻辑的复杂性,您可能需要这个 (或者这个可能会变得更易读):