我在djagno有两张table
class Item(models.model):
name = models.TextField()
type = models.ForeignKey(ItemType)
quantity = models.IntegerField()
和
class ProductionRecord(models.model):
item = models.ForeignKey(Item)
done = models.IntegerField()
我想做的是按类型对项目进行分组,求出所需项目的总数,然后求出所生产项目的总数。
我很接近,但我遇到的问题是 .annotate(Sum("quantity"))
如果一个项目有多个生产记录,它将对每个记录的数量再次求和。
下面是我在加入表之后和分组之前的当前数据集的示例。 `+--------+--------+
11条答案
按热度按时间vulvrdjw1#
----+
nue99wik2#
--+ | ItemId | TypeId | ItemQuantity | ProductionRecordDone | +--------+--------+
67up9zun3#
----+
x7rlezfr4#
--+ | 1257 | 7 | 4 | 1 | | 1257 | 7 | 4 | 4 | | 1259 | 7 | 4 | 4 | | 1261 | 7 | 4 | 0 | | 1263 | 7 | 4 | 4 | | 1265 | 7 | 4 | 0 | +--------+--------+
xpszyzbs5#
----+
vwkv1x7d6#
--+
当对数量列进行普通求和时,它返回24,因为它是对item id=1257求和两次。 但分组后我想返回的是:
+--------+nfeuvbwi7#
----+------+ | TypeId | ItemQuantity | Done | +--------+
eanckbw98#
----+------+ | 7 | 20 | 13 | +--------+
5ssjco0h9#
----+------+` 这里是我当前的python代码,供参考
是否有任何代码可用于只对itemid不同的行中的数量求和?
yzckvree10#
尝试:
请出示证件
queryset.query
如果它不能按预期工作。idfiyjo811#
这不能在一个查询中完成,因为在与生产记录进行外部连接时,数量之和将复合。但是,您可以执行两个查询,并合并dict: