使用列表推导将值附加到对象

时间:2016-06-06 15:00:12

标签: python django

我正在使用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件事

  • 1 - 是否可能
  • 2-Sintaxis-如何正确编码
  • 3 - 如果有可能我如何命名我添加到对象的新字段 - 我 需要在模板中以某种方式访问​​它

1 个答案:

答案 0 :(得分:0)

您不应该尝试使用列表解析来执行此操作。您正在寻找的是数据库聚合。 Django在某种程度上支持这一点。可以在文档中找到更多信息:https://docs.djangoproject.com/en/1.8/topics/db/aggregation/#values

您应该向查询集添加values调用,其中包含您要分组的字段。之后,添加annotate以对每个分组的对象执行所需的聚合。