我有一个类似于以下的查询:
SELECT SUM(name) FROM table WHERE name IS NULL
在Django中,SUM
如何转换为QuerySet
?也就是说,在类似于MyModel.objects.xyz()
的语法中,它对应哪个xyz
操作?
我有一个类似于以下的查询:
SELECT SUM(name) FROM table WHERE name IS NULL
在Django中,SUM
如何转换为QuerySet
?也就是说,在类似于MyModel.objects.xyz()
的语法中,它对应哪个xyz
操作?
更新:以下内容包括原始查询中的ISNULL方面:
from django.db.models import Sum
ModelName.objects.filter(field_name__isnull=True).aggregate(Sum('field_name'))
# returns {'field_name__sum': 1000} for example
你正在寻找Sum聚合函数,它的工作原理如下:
ModelName.objects.aggregate(Sum('field_name'))
请参见:https://docs.djangoproject.com/en/dev/ref/models/querysets/#sum
ModelName.objects.filter(field_name__isnull=True).aggregate(Sum('field_name'))
- rolling stoneresult = ModelName.objects.aggregate(total=Sum('field_name'))['total']
- dani herreraMyModel.objects.aggregate(total=Sum('field_1'))
返回一个类似于{'total': 12345}
的字典。
如果您需要对要求和的值进行过滤,另一种方法是使用Sum
对象通过Q
对象的filter=
参数。以下代码返回field_2
值为空的field_1
值的总和,即等同于SQL查询SELECT SUM(field_1) FROM table WHERE field_2 IS NULL
。
from django.db.models import Q, Sum
MyModel.objects.aggregate(total=Sum('field_1', filter=Q(field_2__isnull=True)))
aggregate()
时解包为关键字参数。dct = {'total': Sum('field_1', filter=Q(field_2__isnull=True))}
MyModel.objects.aggregate(**dct)