我有一个更新模型对象的AJAX请求。它在dict中发送新值,如:
new_value = {'attribute': 'value'}
我正在使用方法update()来保存新值:
.update(**new_value)
它保存了对象,但它正在跳过我的MinValueValidator:
field = models.DecimalField(... validators=[MinValueValidator(Decimal('0.01'))])
如何使此验证器与update()一起使用?管理员工作得很好。
答案 0 :(得分:0)
正如@Sayse在评论中所写,验证者只能在表格(也是管理表格)中使用。
您可以通过覆盖模型的save()
方法来实现所需。只需检查值是否正常,否则抛出异常。
答案 1 :(得分:0)
我没有使用updates()更新我的对象,而是最终从dict中提取数据并使用field.clean调用seattr:
field = item._meta.get_field(attribute)
setattr(item, attribute, field.clean(attr_value, item))
这样可以正确抛出验证器。
要覆盖模型save()方法以验证字段并抛出异常可能不是我所读过的最佳实践。也许,在模型中为它编写一个干净的方法是一种更好的方法。无论如何,Michał Werner的回答似乎解决了我的问题。