为什么值查询集与模型属性不匹配

时间:2015-01-16 03:02:27

标签: django

使用django 1.7,python 3.4和postgres 9.4。

当我直接查询模型的属性时,它返回正确的值。 当我使用.values()查询相同的模型时,它返回不正确的值。

例如:

>>>bomitem = self.itemproduction.billOfMaterials()
>>>for x in bomitem:
>>>    x.ratio
>>>>50
>>>>20
>>>>bomitem.values('ratio')
>>>>[{'ratio': 5}, {'ratio': 2}]

Self和itemproduction是OneToOneField关系。

ItemProduction.billOfMaterials()会覆盖Product.billOfMaterials()

def billOfMaterials(self):
    bom = self.inventoryItem.product.billOfMaterials()
    for x in bom:
        x.ratio = x.ratio * self.qty
    return bom 

这基本上采用了产品的物料清单(配方清单),并计算了生产n量产品的预期物料清单。 此外,当我尝试过滤bomitem时,生成的查询集具有相同的不正确值。

>>>>bomitem.get(component=x)
>>><BOM: Product One: 5>

为什么这种不稳定的行为?

1 个答案:

答案 0 :(得分:1)

数据库中的值是您使用.values('ratio')看到的内容 如果您希望该值为x.ratio = x.ratio * self.qty,则必须在将该模型实例与Python代码初始化并进行计算后将该模型实例保存到数据库中

更好的方法是使用不同的字段,一个用于ratio,一个用于您需要的计算值(并决定是否要将它们保存到数据库中或动态计算,除非需要,通常最好不要存储任何计算字段,这样你的数据就不会在数据库中不一致了)