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
вместо |
.