Как сгруппировать по в запросе для Django admin serach?

У меня есть модель под названием Task. Пользователь должен найти определенный поиск в админке django. Поэтому я реализую метод:

def get_search_results(self, request, queryset, search_term):

in class TaskAdmin(admin.ModelAdmin):. Я определяю queryset сложным способом. Но это работает. Теперь у меня есть замечательный набор queryset, который приводит к почти идеальному SQL-запросу. Не хватает только одной вещи. Я бы хотел добавить GROUP BY в конце. Но как это сделать? Я пробовал несколько вариантов:

Начальная точка:

[...]
queryset = self.model.objects.filter(joinedQ)

Django aggregation:

.values.aggregate() обычно приводит к группировке по, но я не могу использовать .values для этого запроса, потому что django admin не ожидает dict в качестве результата. См: Группировать по дням в django admin?

используя скрытый атрибут group_by запроса:

queryset.query.group_by = ["product"]
queryset = QuerySet(query=queryset.query, model=Task)

Не работает. Результирующий запрос имеет все столбцы в group by, а не только столбец product, как я указал. Таким образом, он ничего не группирует.

Запрос в строку и затем вручную добавить GROUP BY

string_query = str(queryset.query)
string_query += 'GROUP BY "main_task"."product", "main_task"."version"'
queryset = Task.objects.raw(string_query)

В результате получается правильный запрос, который находит правильные результаты, но я получаю исключение: AttributeError: 'RawQuery' object has no attribute 'order_by'

используя .distinct("product")

Работает, но только в бэкендах PostgreSQL. Которого у меня нет

Так что я много чего перепробовал, но все не работает. В настоящее время я использую sqlite backend. Sqlite может легко выполнить запрос, как мне нужно, но как заставить django сделать это?

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