使用Django ORM

时间:2018-11-14 14:57:05

标签: sql django orm

我有以下模型:

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 :(得分:0)

这应该为您解决问题。请注意,如果您需要尊重时区,那么通过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')
)