使用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>
为什么这种不稳定的行为?
答案 0 :(得分:1)
数据库中的值是您使用.values('ratio')
看到的内容
如果您希望该值为x.ratio = x.ratio * self.qty
,则必须在将该模型实例与Python代码初始化并进行计算后将该模型实例保存到数据库中
更好的方法是使用不同的字段,一个用于ratio
,一个用于您需要的计算值(并决定是否要将它们保存到数据库中或动态计算,除非需要,通常最好不要存储任何计算字段,这样你的数据就不会在数据库中不一致了)