【发布时间】:2011-04-17 11:32:25
【问题描述】:
我有以下 django 模型(映射到表 'A'):
class A(models.Model):
name = models.CharField(max_length=64, null=False)
value = models.IntegerField()
...
我想在上面执行以下简单查询:
select avg(case
when (value > 0 and value <= 50) then 0
when (value > 50 and value < 70) then 50
else 100 end)
from A
where ...
我试图避免使用原始 SQL - 如何使用 django 来实现(在上面的示例中,我使用的是 avg,但同样的问题也与 max、min、sum 等相关)?
我尝试使用额外和聚合:
extra(select={'avg_field': case_when_query})
和
aggregate(Avg('avg_field')),
但聚合函数仅适用于模型字段,因此此处不能使用额外字段。 django如何做到这一点?
感谢您的帮助
【问题讨论】:
标签: django django-models