2013-01-18 2 views
0

Django F() 표현식으로 할당 된 필드의 유효성을 검사하지 못했습니다. 나는 the Django doc에서 변형 예 :Django F() 표현식을 full_clean()과 함께 원자 적 업데이트에 사용할 수 있습니까?

>>> product = Product.objects.get(name='Venezuelan Beaver Cheese') 
>>> product.number_sold = F('number_sold') + 1 
>>> product.full_clean() # My addition. 
>>> product.save() 

그리고 나는 점점 해요 : ValidationError: {'number_sold': [u"'(+: (DEFAULT:), 0)' value must be an integer."]}합니다. 실제로 판매 된 숫자는 정수가 아니지만 django.db.models.expressions.ExpressionNode의 인스턴스입니다.

이 방법이 있습니까? 모든 모델은 각 저장시 자동으로 full_clean()을 호출하는 기본 클래스를 확장하며이 기본 클래스는 유지하지만 원자 업데이트를 사용할 수 있습니다.

+0

django 소스에서 full_clean을 해제하고 ExpressionNode 값이 항상 유효하다고 가정하는 구현을 직접 작성해야합니다. –

답변

-1

정수 필드에 정수가 아닌 값을 저장하는 중 문제가 발생했습니다.

필드 number_sold은 (는) 귀하의 경우 정수로 예상됩니다.

F('number_sold')은 빈 필드를 참조한다고 가정합니다.

는 그 일이 저에게 알려 주시면 당신의 오류를 방지하는 논리를 제공 할 수 있다면 어떤 하드 코딩과 같은 1

으로 F('number_sold') + 1를 교체하십시오.

+0

나는 그것이 사실이라고 생각하지 않는다. number_sold는 models.IntegerField (기본값 = 0)입니다. 또한 full_clean(), save() 값을 제거한 다음 object를 다시 읽으면 number_sold가 올바르게 증가합니다 (1이됩니다). –