我有以下模型:
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
答案 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')
)