Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以django形式将两个字段相乘_Python_Mysql_Django - Fatal编程技术网

Python 以django形式将两个字段相乘

Python 以django形式将两个字段相乘,python,mysql,django,Python,Mysql,Django,如何执行以下查询(伪代码): 基本上,我想获得上述查询的amount*opportunities的总和。实现它的一种可能方法是使用一个名为的Queryset方法 它返回一个特定的查询集(ValuesListQuerySet),然后您可以对其进行进一步的计算 您可以这样做: vqs=cuepletion.objects.filter( 用户id=profile\u user.pk,状态\u行动\u在\u gte=day\u采取 ).价值清单(“金额”、“机会”) 然后你会有类似于vqs=[(50,

如何执行以下查询(伪代码):


基本上,我想获得上述查询的amount*opportunities的总和。

实现它的一种可能方法是使用一个名为的Queryset方法

它返回一个特定的查询集(ValuesListQuerySet),然后您可以对其进行进一步的计算

您可以这样做:

vqs=cuepletion.objects.filter(
用户id=profile\u user.pk,状态\u行动\u在\u gte=day\u采取
).价值清单(“金额”、“机会”)

然后你会有类似于
vqs=[(50,2),(100,4),(25,2),…])
的东西,即一个由n个元组组成的“列表”,每个元组都有amount和opportunities字段的值

(实际上,
vqs
它不是一个列表,它是一个ValuesListQuerySet,但对于我们的下一步行动来说并不重要)


我们的下一步(即进一步计算)是:

total=sum(对于vqs中的t,t[0]*t[1])

我们在包含所有(数量*机会)结果的生成器上使用内置函数


(为什么使用生成器而不是列表理解?检查!)

您还可以在使用
F
对象时向查询集添加注释。通过这种方式,您可以在数据库中进行所有计算,这可能比将所有值拉入列表并使用python内存进行列表理解要快

CueCompletion.objects.filter(
user_id=profile_user.pk, status_action_taken_on__gte=day_ago
).annotate(total=F('amount') * F('opportunities'))

现在,您可以通过
total
变量访问此值。

您应该为此解决方案获得奖牌。这太棒了,我们从django.db.models import F寻找了一个多小时的完美解决方案
CueCompletion.objects.filter(
user_id=profile_user.pk, status_action_taken_on__gte=day_ago
).annotate(total=F('amount') * F('opportunities'))