是否可以将Django F()表达式与full_clean()一起用于原子更新?

时间:2013-01-18 20:42:52

标签: django django-models django-validation

我刚刚发现分配了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(),我真的很想保留这个基类,但是能够使用原子更新。

1 个答案:

答案 0 :(得分:-2)

问题在于您尝试在整数字段中保存非整数值。

字段number_sold在您的情况下应为整数。

我认为F('number_sold')引用了一个空字段。

尝试将F('number_sold') + 1替换为硬编码的内容,例如1。

如果有效,请告诉我,我可以提供逻辑以避免您的错误。