我在我的模型中创建并随后更改了一个DecimalField。现在,当我尝试运行python manage.py migrate时,会得到以下错误:
decimal.InvalidOperation: quantize result has too many digits for current context在阅读了这里的各种相关问题之后,我尝试了增加max_digits,但这并没有帮助。--我已经手动删除了postgreSQL数据库中的模型,希望能够在迁移模型时重新创建它,但是仍然会遇到同样的错误,无法迁移模型并在数据库中重新创建模型。
这就是所讨论的模式:
class Version(models.Model):
version_number = models.DecimalField(default=1.0, max_digits=3,
decimal_places=2)我能做些什么来补救这个问题?
编辑当我更改DecimalField时更改了max_digits
发布于 2015-07-08 11:30:15
似乎您的问题实际上不是DecimalField的问题,而是手动删除表作为故障排除的步骤。
据我所知,makemigrations工具没有根据现有数据库中的内容进行更改,而是根据先前迁移中定义的内容进行更改。
因此,如果您不使用它而进行更改,则必须手动创建或编辑迁移文件来更正它。
有关编辑迁移文件的示例,请参阅以下内容:
https://docs.djangoproject.com/en/1.8/howto/writing-migrations/
我不知道这里的协议是什么,但可能会找到首先创建表的迁移,并将适用的序列复制到挂起的迁移文件中。
发布于 2015-07-08 10:50:50
好的,在这里设置默认值有问题:
你需要导入十进制。
from decimal import Decimal
class Version(models.Model):
version_number = models.DecimalField(default=Decimal('1.00'), max_digits=3,
decimal_places=2)发布于 2017-01-14 13:31:15
因此,我也遇到了同样的问题,无论如何更改现有的DecimalField,我都会得到这个错误(decimal.InvalidOperation)。
为了查找它,我在django utils.py (.\site-packages\django\db\后端)中设置了一个pdb/ set _trace,以查看导致此异常的原因。
在我的示例中,它使用的是max_digits=4和decimal_places=4 (这也不是该模型字段的最新值)。所以我开始研究这些功能,发现其中一个早期的迁移导致了这一切。
我将与该模型字段相关的迁移和所有其他迁移更改为最近的版本,并进行了修复
https://stackoverflow.com/questions/31290125
复制相似问题