我该如何执行以下伪代码查询:
CueCompletion.objects.filter(
user_id=profile_user.pk, status_action_taken_on__gte=day_ago
).sum('amount' * 'opportunities')
基本上,我想要获取上述查询的金额*机会的总和。
在使用F
对象时,您还可以向查询集添加注释。这样,您可以在数据库中执行所有计算,这可能比将所有值提取到列表中并使用Python内存执行列表推导更快。
CueCompletion.objects.filter(
user_id=profile_user.pk, status_action_taken_on__gte=day_ago
).annotate(total=F('amount') * F('opportunities'))
total
访问这个值。vqs = CueCompletion.objects.filter(user_id=profile_user.pk, status_action_taken_on__gte=day_ago).values_list('amount','opportunities')
,然后您将得到类似于vqs = [(50, 2), (100, 4), (25, 2), ...]
的东西,即一个由n个元组组成的列表,每个元组都有amount和opportunities字段的值。(实际上,vqs
不是一个列表,而是一个ValuesListQuerySet,但对我们的下一步操作无关紧要)。