python - For循环在Python中查找匹配值和总计
问题描述
我有一个 Django 项目,其中我的清单模型由项目代码和数量组成。我想遍历模型并找到每个项目代码的总数量。所以我认为有以下几点:
manifest = Manifests.objects.all()
我如何使用 for 循环或其他东西来合计每个项目代码的数量。或者更清楚地说,如果项目代码 10 出现 3 次,数量 = 1、2 和 3。项目代码 10 的总数应该是 6,如果项目代码 20 出现两次,数量 = 2 和 5,总数应该是 7。
这是供参考的模型:
模型.py
class Manifests(models.Model):
reference = models.IntegerField()
quantity = models.IntegerField()
item_code = models.ForeignKey(Products, default=None, blank=True, null=True)
解决方案
请不要使用循环for
。您可以使用以下方式注释您的查询集Products
:
from django.db.models import Sum
Products.objects.annotate(
total_quantity=Sum('manifests__quantity')
)
Products
从此查询集中产生的对象将具有一个额外的属性.total_quantity
,该属性将包含相关s 对象的.quantity
s的总和。 Manifests
或者您可以只计算带有以下内容的Manifests
对象reference=10
:
from django.db.models import Sum, Q
Products.objects.filter(
Q(manifests=None) | Q(manifests__reference=10)
).annotate(
total_quantity=Sum('manifests__quantity')
)
注意:通常模型的名称是单数的,所以
Manifest
代替, 和Manifests
Product
代替。Products
推荐阅读
- node.js - 将 Node 更新到 v14 后,Node/Express 服务器未连接到 postgres 数据库
- python - 姜戈 | 在哪里迭代:视图或模板
- python - Django如何在创建新项目时添加默认变体
- python - Odoo:search_count 不显示存档记录
- selenium-webdriver - 第二次调用时无法识别 PageObjects
- javascript - 如何设置 Firebase 身份验证,只有具有自定义密码的用户才能注册?
- javascript - 暗模式 TypeError:无法将属性“onClick”设置为 null
- date - 如何使用 Moment.js 忽略时区?
- latex - 如何使用 \part* 重置章节计数器
- mysql - 为单个列获取多个值的搜索存储过程