2015-01-16 4 views
0

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}] 

자기와 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에 걸러 낼 때, 결과 queryset은 똑같은 부적절한 값을가집니다.

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

왜 이런 비정상적인 동작입니까?

답변

1
데이터베이스의 값을 사용하면 값이 x.ratio = x.ratio * self.qty 싶은 경우에 당신이 그것을 계산하여 파이썬 코드 initialiazed 한 후, 데이터베이스에 해당 모델 인스턴스를 저장해야합니다 .values('ratio') 에 표시되는 내용입니다

ratio에 대해 하나의 필드를 사용하고 필요한 계산 값에 다른 필드를 사용하는 것이 더 좋을 것입니다. (필요하지 않으면 일반적으로 DB에 저장하거나 계산할 것인지 결정하십시오. 더 나은 계산 된 필드를 저장하지 않는 것이 좋습니다. 그러면 데이터가 DB에서 일치하지 않을 수 있습니다.

관련 문제