Django更新对象 - 验证器

时间:2016-12-14 17:19:36

标签: python json django validation

我有一个更新模型对象的AJAX请求。它在dict中发送新值,如:

new_value = {'attribute': 'value'}

我正在使用方法update()来保存新值:

.update(**new_value)

它保存了对象,但它正在跳过我的MinValueValidator:

field = models.DecimalField(... validators=[MinValueValidator(Decimal('0.01'))])

如何使此验证器与update()一起使用?管理员工作得很好。

2 个答案:

答案 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的回答似乎解决了我的问题。