[英]Django - add-up Sum of multiple model fields
How can i add-up the Sum of each Model here?我如何在这里添加每个模型的总和? In the end i simply want to have one single value for all up_votes /down_votes accross all 3 models.最后,我只想为所有 3 个模型的所有 up_votes /down_votes 设置一个值。 See example below:请参阅下面的示例:
def calc_user_feedback():
users = User.objects.all()
try:
for user in users:
fed_qry_up_votes = Model1.objects.filter(author=user).aggregate(Sum('up_vote')) + \
Model2.objects.filter(author=user).aggregate(Sum('up_vote')) + \
Model3.objects.filter(author=user).aggregate(Sum('up_vote'))
fed_qry_down_votes = Model1.objects.filter(author=user).aggregate(Sum('down_vote')) + \
Model2.objects.filter(author=user).aggregate(Sum('down_vote')) + \
Model3.objects.filter(author=user).aggregate(Sum('down_vote'))
logger.info("Overall user feedback calculated successfully.")
except:
logger.info("Error processing task: 'Calculate user feedback', please investigate")
Assuming author
has no related_name
set on each model:假设author
在每个模型上都没有设置related_name
:
from django.db.models import F, Sum
users = (
User.objects.annotate(up_votes_1=Sum("model1_set__up_vote"))
.annotate(up_votes_2=Sum("model2_set__up_vote"))
.annotate(up_votes_3=Sum("model3_set__up_vote"))
.annotate(total=F("up_votes_1") + F("up_votes_2") + F("up_votes_3"))
)
Now you can iterate over users and get a total for each one.现在您可以遍历用户并获得每个用户的总数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.