2010-07-22 3 views
4

내 모델 중 하나에서 BooleanField 값을 변경하려고하지만 장고가 허용하지 않습니다.장고 모델에서 BooleanField 값을 설정할 때 이상한 문제가 발생했습니다.

query = MyModel.objects.filter(name='example').filter(boolField=False) 
print query[0].boolField 
query[0].boolField = True 
query[0].save() 
print query[0].boolField 

이 놀라 울 정도로 인쇄 : 다음 = True가 부착되지 않는 이유

False 
False 

어떤 생각이 여기에 관련 코드는? 미리 감사드립니다!

편집 : 이것은 고정이 :

query = MyModel.objects.get(name='example', boolField=False) 
query.boolField = True 
query.save() 

당신이에 의해 필터링 된 쿼리에 필드를 변경할 수없는 것?

+0

이렇게하는 이유는 무엇입니까? 하나의 객체를 가져 오는 중이라면'MyModel.objects.get'을 사용하지 않을까요? –

+2

나는 그것을 .get으로 바 꾸었습니다. 그걸 수정 한 것 같습니다. 왜 그런가? 필터링 한 필드를 변경할 수 있습니까? – hora

답변

7

필터링이 문제가 아니므로 슬라이스입니다.

f = MyModel.objects.all()[0] 
f.id  # 1 
id(f)  # 4326035152 
ff = MyModel.objects.all()[0] 
ff.id  # 1 
id(ff)  # 4326035344 

여기 fff이 동일한 기본 데이터베이스 행을 참조하지만 다른 실제 객체 인스턴스 : 당신이 검색어 세트 슬라이스마다, 장고는 당신에게 다른 객체를 제공합니다. 그래서 당신의 예제에서, boolean을 설정 한 인스턴스는 저장하려고 한 인스턴스와 같지 않습니다.

+0

아, 고마워. 그것은 훨씬 더 의미가 있습니다. – hora