Агрегация и дополнительные значения с Джанго - PullRequest
1 голос
/ 05 июля 2010

У меня есть модель, которая выглядит следующим образом:

class MyModel(models.Model)
    value = models.DecimalField()
    date = models.DatetimeField()

Я делаю этот запрос:

MyModel.objects.aggregate(Min("value"))

и получаю ожидаемый результат:

{"mymodel__min": the_actual_minimum_value}

Однако я не могу найти способ одновременно получить минимальное значение И связанную с ним дату (дату, когда произошло минимальное значение).

Позволяет ли Django ORMэто или я должен использовать сырой SQL?

1 Ответ

2 голосов
/ 06 июля 2010

То, что вы хотите сделать, - это аннотировать запрос, чтобы вы возвращали свои обычные результаты, но при этом к результату добавлялись некоторые данные.Итак:

MyModel.objects.annotate(Min("value"))

Вернет обычный результат с mymodel__min в качестве дополнительного значения

В ответ на ваш комментарий, я думаю, это то, что вы ищете?Это вернет даты с соответствующими им минимальными значениями.

MyModel.objects.values('date').annotate(Min("value"))

Редактировать: В ответ на ваш комментарий о том, что вы хотите запись с наименьшим значением, но также хотите добавить дополнительное поле даты в свой результат, вы можете сделатьчто-то вроде этого:

MyModel.objects.values('date').annotate(min_value=Min('value')).order_by('min_value')[0] 

Получите требуемый диктат, упорядочив результаты, а затем просто взяв первый индекс, который всегда будет самым низким значением.См больше

...