我有三种模式:
class Variety(models.Model)
name = models.CharField(max_length=24)
class Item(models.Model)
name = models.CharField(max_length=24)
in_stock = models.IntegerField()
class ItemPart(models.Model)
variety = models.ForeignKey(Variety)
product = models.ForeignKey(Product)
qty = models.IntegerField()
我想通过获取所有相关的ItemParts并将qty
乘以其相关项目的in_stock
来告诉我们每个Variety中有多少已被制作成物品。
我已经走到这一步了:
Variety.objects.all().prefetch_related('itempart_set').values('name').annotate(
Sum(F("itempart_set__qty") * F("itempart_set__item_set__in_stock")
)
这会有用吗?它会对产品求和,还是简单地乘以总和?
答案 0 :(得分:1)
您无法使用prefetch_related
查询的模型进行数学运算,因为prefetch_related
会与原始查询分开点击数据库。您的查询集可能被评估为两个数据库查询,在这种情况下,数据库级别的数学是不可能的。
现在,我并不是说上述查询不起作用(Django正在发挥作用,毕竟我们不知道你正在使用哪个版本),但我和#39;我说prefetch_related
不会给你提高计算性能。
如果上述方法不起作用,我会尝试使用Django 1.11中引入的子查询。