Django 自定义过滤器"在拥有之前需要 GROUP BY 子句"



我写了一个自定义过滤器,链接到一个有5个选项(0,1,1.75,2.5,3.25和4)的MultipleChoiceFilter:

def filtre_personnalise(self,queryset, name,value):
query=FicheIdentification.objects.none()
for i in value:
if i=='0':
query|=queryset.prefetch_related(Prefetch('entreprise',Entreprise.objects.all())).exclude(pk__in=[x.entreprise.siret for x in EvaluationGenerale.objects.all()])
else :
query|=queryset.prefetch_related(Prefetch('entreprise',Entreprise.objects.all())).annotate(note_moyenne=Avg('entreprise__evaluationgenerale__note')).filter(note_moyenne__range=(float(i),float(i)+0.75))
return query

如果我单独勾选每个值,一切都按预期工作,返回的查询集是我想要的。

如果我同时勾选几个值,只要0不是其中之一,一切都可以正常工作。1和4一起工作很好)。

但是一旦0被另一个值勾起,我就会得到以下错误:

a GROUP BY clause is required before HAVING

我真的不知道为什么它会这样做。我试图用.union替换|,但得到了这个错误:

django.db.utils.ProgrammingError: each UNION query must have the same number of columns

我认为这与.annotate的使用有关。

我通过用.alias替换.annotate来解决这个问题,以避免创建一个新列。然后我用.union而不是|加入查询。

相关内容

  • 没有找到相关文章

最新更新