Вариант 1:
Хотя group_by()
не существует в Django, вы можете попытаться найти последний закрытый счет для каждого пользователя, используя метод и фильтр latest()
для пользователя:
previous_invoices = Invoice.objects.filter(user=my_user, is_open=False)
.latest('created')
Для более старых версий Django, где latest()
не существует, запрос будет выглядеть следующим образом:
previous_invoices = Invoice.objects.filter(user=my_user, is_open=False)
.order_by('-created')[0]
Вариант 2:
Если вы абсолютно хотите создать эффекты group_by
, создайте их вручную, как показано в принятом ответе здесь: Значение поля Django GROUP BY .
Используйте .values_list()
с flat=True
, чтобы получить список существующих значений в вашей базе данных (если вы не знаете их заранее). Также используйте .distinct()
, чтобы исключить дублирующиеся значения, так как мы не заботимся о них:
value_list = MyModel.objects.values_list(
'interesting_field', flat=True
).distinct()
Теперь переберите value_list
и заполните свой словарь:
group_by_value = {}
for value in value_list:
group_by_value[value] = MyModel.objects.filter(interesting_field=value)
Теперь group_by_value
словарь содержит в качестве ключей различные значения
в вашем interesting_field
и в качестве значений объектов набора запросов, каждый
содержащие записи MyModel
с interesting_field=a value
from value_list
.
Примечание:
Существует такая библиотека django-group-by , которая утверждает, что добавила group_by()
в Django, который вы можете захотеть проверить.