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