我写了一个自定义过滤器,链接到一个有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
而不是|
加入查询。