Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 29, 2016 19:13:35

Jenyay
От:
Зарегистрирован: 2007-08-10
Сообщения: 173
Репутация: +  1  -
Профиль   Отправить e-mail  

Выборка объектов в Django

Привет!

Есть модель в Django, описывающая историю изменения некой величины для каждого пользователя со временем.

class UserValueHistory (models.Model):
    user = models.ForeignKey (...)
    value = models.FloatField (...)
    date = models.DateTimeField (...)

Задача состоит в том, чтобы получить выборку, содержащую пользователей и value, соответствующее максимальной date для каждого пользователя, с помощью инструментов Django без использования ручного написания SQL.



Офлайн

#2 Янв. 29, 2016 22:38:44

SirJorah
Зарегистрирован: 2015-04-21
Сообщения: 41
Репутация: +  2  -
Профиль   Отправить e-mail  

Выборка объектов в Django

Так пробовали?

sel_set = []
for user in Users:
    one_obj = {}
    uv = UserValueHistory.objects.filter(user=user).order_by("-date")[0]
    one_obj["user"] = user
    one_obj["value"] = uv.value
    sel_set.append(one_obj)
По идее, должно прокатить

Офлайн

#3 Янв. 30, 2016 08:02:39

Jenyay
От:
Зарегистрирован: 2007-08-10
Сообщения: 173
Репутация: +  1  -
Профиль   Отправить e-mail  

Выборка объектов в Django

Да, по идее так должно работать, но тут придется делать столько же запросов к базе, сколько пользователей. Вот думаю, может можно обойтись одним-двумя запросами.



Офлайн

#4 Янв. 30, 2016 10:01:47

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Выборка объектов в Django

А разве задача не решается простым агрегированием по Max(date)?



Офлайн

#5 Янв. 30, 2016 10:06:17

Jenyay
От:
Зарегистрирован: 2007-08-10
Сообщения: 173
Репутация: +  1  -
Профиль   Отправить e-mail  

Выборка объектов в Django

В том то и дело, что мне нужно получить не просто Max(date), а значения value, которые соответствуют каждой из Max(date).



Офлайн

#6 Янв. 30, 2016 11:08:27

SirJorah
Зарегистрирован: 2015-04-21
Сообщения: 41
Репутация: +  2  -
Профиль   Отправить e-mail  

Выборка объектов в Django

Сам думал о том, что мой вариант грешит большим количеством запросов. Но как-то по другому - только SQL в голову приходит. Специально перечитал пару глав из Головатого, но таких случаев там не рассматривают. Может, кто из мега-опытных (не ирония) коллег предложит решение? Тоже интересно.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version