我刚刚发现分配了Django F()
表达式的字段无法验证。我修改了the Django doc的示例:
>>> 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 :(得分:-2)
问题在于您尝试在整数字段中保存非整数值。
字段number_sold
在您的情况下应为整数。
我认为F('number_sold')
引用了一个空字段。
尝试将F('number_sold') + 1
替换为硬编码的内容,例如1。
如果有效,请告诉我,我可以提供逻辑以避免您的错误。