Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 17, 2016 16:12:00

scurramalum
Зарегистрирован: 2014-07-22
Сообщения: 38
Репутация: +  1  -
Профиль   Отправить e-mail  

Выборка из БД с помощью ORM

Добрый день! Ув. знатоки, прошу помочь с проблемой.

Структура моделей:

class Person(models.Model):
    name = models.CharField()
class Plan(models.Model):
    person = models.ForeignKey(Person, related_name='persons_plan')
    month = models.DateTimeField() # январь, февраль, март...(одна запись в месяц)
    val = models.IntergerField()
class Fact(models.Model):
    person = models.ForeignKey(Person, related_name='persons_fact')
    month = models.DateTimeField() # январь, февраль, март...(одна запись в месяц)
    val = models.IntergerField()


Вопрос в том, как мне получить такую выборку (QuertSet или список словарей values()), такого представления, при месяцах запроса, допустим переменная
month_period=[1,2,3]
:

Январь (Plan) Февраль (Plan) Март (Plan) Январь (Plan) Февраль (Plan) Март (Plan)
Person 1 val val val val val val
Person 2 val val val val val val
Person 3 val val val val val val
… … … …

где val - значение модели Plan (или Fact) для данного пользователя

никак не могу создать выборку(

Спасибо!

Отредактировано scurramalum (Апрель 17, 2016 16:12:23)

Офлайн

#2 Апрель 17, 2016 16:25:17

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

Выборка из БД с помощью ORM

Вопрос, а зачем месяц сделан DateTimeField?
Это же число от 1 до 12.
Ну а по сути вопроса вам нужна группировка, гуглить Django annotate и Django aggregate.



Офлайн

#3 Апрель 17, 2016 20:41:05

scurramalum
Зарегистрирован: 2014-07-22
Сообщения: 38
Репутация: +  1  -
Профиль   Отправить e-mail  

Выборка из БД с помощью ORM

DateTimeField сделано для того, что есть другой функционал, где требуется именно дата и время (дата постановки плана может быть выставлена в течении всего месяца)

Вот прочитал эти функции и никак не пойму как их здесь использовать. По сути получить значение одного месяца я могу легко, но как выстроить, чтобы у Person было свойство со значением других месяцев, никак не доходит…притом что понимаю, на уровне SQL здесь достаточно не сложный запрос (на сколько я могу представить), но интересно как с помощью ORM получить такой результат….очень интересно!

Офлайн

#4 Апрель 17, 2016 23:19:00

scurramalum
Зарегистрирован: 2014-07-22
Сообщения: 38
Репутация: +  1  -
Профиль   Отправить e-mail  

Выборка из БД с помощью ORM

Спасибо! нашел решение! Действительно через функции агрегации. Но еще используя конструкции When(), Case() в запросе агрегации.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version