我的模型看起来像这样:
class Price(models.Model):
book = models.ForeignKey(Book)
date = models.Dateield(auto_now_add=True)
publisher = models.ForeignKey(Publisher)
price = models.PositiveSmallIntegerField()
多个列没有唯一约束,每本图书可以为同一个发布商提供一天的多个价格。
我想将所有价格分组,但首先我要将特定发布商的特定日期的所有价格(平均值)分组。这将有效地返回日期,出版商和图书的唯一记录。
然后我想将特定日期的特定图书的所有价格(总和)分组。
这是我要写的SQL:
SELECT book_id
, DATE(date) as date
, SUM(price) AS price
FROM
( SELECT book_id
, DATE(date) as date
, AVG(price) AS price
, publisher_id
FROM literature_prices
GROUP
BY date
, book_id
, publisher_id
)
GROUP
BY book_id
, date
这在SQL中很容易,但我不确定如何使用Djano ORM做同样的事情。有什么帮助吗?
答案 0 :(得分:0)
Django中的聚合api在这里有详细记载:
https://docs.djangoproject.com/en/dev/topics/db/aggregation/
在您的示例中按发布商汇总的示例是。
query_set = Price.objects.extra(select={'count': 'count(1)'},
order_by=['-count']).values('count', 'publisher')
query_set.query.group_by = ['publisher']
对于多层次。我相信你可以继续在query_set对象上调用aggregate()和group_by函数。
答案 1 :(得分:0)
您还可以将SQL查询用作视图,并围绕该视图创建Django模型。
详细说明可在此处找到:http://anthony-tresontani.github.com/Django/2012/09/12/wka-django-orm-limitations/