我正在使用django,由于Django框架的一些限制,必须使用列表理解来过滤我模型中的值。
我目前的陈述是
po_list = [n for n in Material.objects.all() if ((F('total_inventory') + F('total_po') - F('total_so')) < F('min_quantity'))]
我想要实现的不仅仅是返回已过滤的列表,还要向n添加一个包含计算值的新列。 (我不想在模板中再次重做那些计算,目标是仅在一个地方完成计算)
所以它应该是这样的
po_list = [n+[F(max_quantity) - total_inv] for n in Material.objects.all() deficit = (F('total_inventory') + F('total_po') - F('total_so')) total_inv = (F('total_inventory') + F('total_po') - F('total_so')) if (total_inv < F('min_quantity'))]
我挣扎着3件事
答案 0 :(得分:0)
您不应该尝试使用列表解析来执行此操作。您正在寻找的是数据库聚合。 Django在某种程度上支持这一点。可以在文档中找到更多信息:https://docs.djangoproject.com/en/1.8/topics/db/aggregation/#values
您应该向查询集添加values
调用,其中包含您要分组的字段。之后,添加annotate
以对每个分组的对象执行所需的聚合。