Найти - Пользователи
Полная версия: Выборка из БД с помощью ORM
Начало » Django » Выборка из БД с помощью ORM
1
scurramalum
Добрый день! Ув. знатоки, прошу помочь с проблемой.

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

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) для данного пользователя

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

Спасибо!
FishHook
Вопрос, а зачем месяц сделан DateTimeField?
Это же число от 1 до 12.
Ну а по сути вопроса вам нужна группировка, гуглить Django annotate и Django aggregate.
scurramalum
DateTimeField сделано для того, что есть другой функционал, где требуется именно дата и время (дата постановки плана может быть выставлена в течении всего месяца)

Вот прочитал эти функции и никак не пойму как их здесь использовать. По сути получить значение одного месяца я могу легко, но как выстроить, чтобы у Person было свойство со значением других месяцев, никак не доходит…притом что понимаю, на уровне SQL здесь достаточно не сложный запрос (на сколько я могу представить), но интересно как с помощью ORM получить такой результат….очень интересно!
scurramalum
Спасибо! нашел решение! Действительно через функции агрегации. Но еще используя конструкции When(), Case() в запросе агрегации.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB