Django Пользовательский фильтр "перед HAVING требуется предложение GROUP BY"

Я написал пользовательский фильтр, связанный с MultipleChoiceFilter с 5 вариантами выбора (0,1,1.75,2.5,3.25 и 4) :

 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.

Я решил проблему, заменив .annotate на .alias, чтобы избежать создания нового столбца. Затем я объединил запросы с помощью .union вместо |.

Вернуться на верх