Django:如果__init __()只是在提供数据后立即引发错误,那么如何验证模型?

时间:2010-01-22 23:10:51

标签: django django-models

假设我有CarModel(models.Model)使用price = models.DecimalField()

导入CarModel

car = CarModel(name='Corvette', price='Hello World')
Traceback (most recent call last):
...
ValidationError: 'price needs to be a Decimal()'

错误基本上就是这样。

由于价格期望小数但收到字符串,因此会立即引发ValidationError。

我期待它能像这样工作:

car = CarModel(name='Corvette', price='Hello World')
car.full_clean()
Traceback (most recent call last):
...
ValidationError: 'price needs to be a Decimal()'
我正在考虑这个吗?是否只应在save()或显式调用full_clean()时引发ValidationError?

1 个答案:

答案 0 :(得分:1)

直到执行save()后才会保存实例。据说问题是一个 init django尝试进行适当的强制,将所有值转换为正确的数据类型。在这种情况下,数据甚至无法正确强制,因此Django会立即给您一个例外。我意识到这种区别可能看起来有点模糊,但如果不是这种方式,你可能会在没有获得Decimal对象的情况下从模型中获取DecimalField。