У меня есть модель, которая похожа на это:
class MyModel(models.Model)
value = models.DecimalField()
date = models.DatetimeField()
Я делаю этот запрос:
MyModel.objects.aggregate(Min("value"))
и я получаю ожидаемый результат:
{"mymodel__min": the_actual_minimum_value}
Однако я не могу выяснить способ получить одновременно минимальное значение И связанную дату (дата, в которую минимальное значение произошло).
Django ORM позволяет это, или я должен использовать необработанный SQL?
Что вы хотите сделать, так это аннотировать запрос, чтобы вы получили свои обычные результаты, но также имели некоторые данные добавлен к результату. Итак:
MyModel.objects.annotate(Min("value"))
Вернет нормальный результат с mymodel__min
в качестве дополнительного значения
В ответ на ваш комментарий, я думаю, это то, что вы ищете? Это вернет даты с соответствующими значениями Min.
MyModel.objects.values('date').annotate(Min("value"))
Редактировать: В дальнейшем ответе на ваш комментарий, в котором вы хотите получить запись с наименьшим значением, но также хотите, чтобы в вашем результате было дополнительное поле даты, вы можете сделать что-то вроде этого:
MyModel.objects.values('date').annotate(min_value=Min('value')).order_by('min_value')[0]
Это даст результат, который вы просите упорядочив результаты, а затем просто взяв первый индекс, который всегда будет наименьшим значением. См. подробнее