使用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}]自产生和项目产生是一个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.get(component=x)
>>><BOM: Product One: 5>为什么会有这种古怪的行为?
发布于 2015-01-16 03:11:03
数据库中的值是用.values('ratio')看到的,如果您想要该值是x.ratio = x.ratio * self.qty,则必须将该模型实例保存到数据库中,然后用计算方法初始化它
一种更好的方法是使用一个不同的字段,一个用于ratio,另一个用于所需的计算值(并决定是否要将它们保存到DB或动态计算中,除非需要,通常最好不要存储任何计算的字段,这样数据库中的数据就不会不一致)
https://stackoverflow.com/questions/27976662
复制相似问题