Django ORM查询使用Q返回错误结果

Django ORM查询使用Q返回错误结果,django,Django,我使用Django ORM进行以下查询: fixtures = Fixture.objects.annotate(oc=Count('odds__id')).filter((Q(odds__result=4) | Q(oc__lt=10)), date__year__gte=2016).distinct() 它应该检索所有赔率对象的结果设置为4的装置,或者赔率对象的计数小于10的装置 执行此查询时,它返回34个fixtures对象,但执行时: fixtures = Fixture.object

我使用Django ORM进行以下查询:

fixtures = Fixture.objects.annotate(oc=Count('odds__id')).filter((Q(odds__result=4) | Q(oc__lt=10)), date__year__gte=2016).distinct()
它应该检索所有赔率对象的结果设置为4的装置,或者赔率对象的计数小于10的装置

执行此查询时,它返回34个fixtures对象,但执行时:

fixtures = Fixture.objects.annotate(oc=Count('odds__id')).filter(oc__lt=10, date__year__gte=2016).distinct()
它返回+30k的夹具对象


如何使第一个查询返回与第二个查询相同数量的对象(或至少接近30k个对象)?为什么这个OR子句不能正常工作?

可以在注释中添加
distinct=True

fixtures = Fixture.objects.annotate(oc=Count('odds__id', distinct=True)).filter((Q(odds__result=4) | Q(oc__lt=10)) & Q(date__year__gte=2016)).distinct()

不,仍然返回34个Fixture而不是+30kI。我编辑了我的答案赔率模型上的
结果
字段是什么?如果执行此操作,您有多少个对象:
Fixture.objects.annotate(oc=Count(“赔率id”)。filter(赔率结果=4,日期年份=2016)。distinct()
@Benbb96 Result是一个ChoiceField,在执行您提到的查询时,我有34个对象。您可能会在文档中看到类似的内容: