2016-06-06 23 views
-1

如果条件,我得到错误的结果在我的列表理解。我尝试了一切提示什么可能是错的。错误的结果列表理解编码

po_list = [n for n in Material.objects.all() 
    if (((F('n.total_inventory') + F('n.total_po') - F('n.total_so'))) < F('n.min_quantity'))] 

目前,它总会给材料模型 的所有数据。如果我切换大于/小于符号方向也没有给出数据


编辑 我错误地认为它是自我解释的代码。 正确的结果是只输出来自Material的值,以满足这3个属性的条件计算((F('n.total_inventory')+ F('n.total_po') - F('n。这个代码是Django项目的一部分,而django框架中的F是: 一个F()对象表示的是一个F()它可以引用模型字段值并使用它们执行数据库操作,而无需实际将它们从数据库中拉出到Python内存中。 https://docs.djangoproject.com/en/1.7/ref/models/queries/

我不能仅仅通过这些值进行过滤他们是计算器特德属性。

+4

你知道你有没有解释* *正确的结果是什么,更不用说为什么它是正确的,不是吗? –

+3

什么是'F',你为什么要传递字符串?它看起来不像你的情况以任何方式使用'n'。 – user2357112

+1

确实条件是独立的变量'n' –

回答

1

不要使用F对象,并使用n变量:

po_list = [n for n in Material.objects.all() 
      if (n.total_inventory + n.total_po - n.total_so) < n.min_quantity] 
+0

不能这样做。由于这3个字段是模型中的计算属性,所以我不能对这些字段进行过滤。 –

+1

@JohnGoldman没关系,更新了答案以反映这一点。希望有所帮助。 – alecxe