我剛剛發現用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()
,我真的很想保留這個基類,但能夠使用原子更新。
我認爲你需要從django源代碼中提取full_clean並編寫你自己的實現,它假定ExpressionNode的值總是有效的。 –