Преобразование данных с помощью Django ORM - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть следующая модель:

class Entry(models.Model):

    name = models.CharField(max_length=100)
    date = models.DateTimeField(default=timezone.now)
    material = models.CharField(max_length=20])
    price = models.FloatField(null=True)

Со следующими данными:

john, 2011-01-21, GOLD, 10.00
blair, 2011-01-21, GOLD, 20.00
peter, 2011-01-21, SILVER, 21.00
peter, 2011-01-22, GOLD, 11.00
john, 2011-01-22, SILVER, 12.00

Я хотел бы:

  • совокупность (дополнение)по материалам на дату
  • производить запись в день со всеми доступными материалами (заранее не известно)

следующим образом:

DATE        GOLD   SILVER
2011-01-21  30.00  21.00
2011-01-22  11.00  12.00

(датыотсутствие во входных данных не приведет к выходной строке)

Как этого можно достичь в SQL?С Django ORM?

Примечание: моя база данных - Postgres

1 Ответ

0 голосов
/ 14 ноября 2018

Это должно помочь вам. Как гласит, если вам нужно уважать часовые пояса, это становится гораздо более трудным делом через ORM.

from django.db.models import DateField
from django.db.models.functions import Cast
Entry.objects.annotate(
    d=Cast('date', DateField())
).values('d', 'material').annotate(
    total=Sum('price')
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...