首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django的破碎迁徙

Django的破碎迁徙
EN

Stack Overflow用户
提问于 2015-07-08 10:34:13
回答 3查看 1.2K关注 0票数 1

我在我的模型中创建并随后更改了一个DecimalField。现在,当我尝试运行python manage.py migrate时,会得到以下错误:

代码语言:javascript
复制
decimal.InvalidOperation: quantize result has too many digits for current context

在阅读了这里的各种相关问题之后,我尝试了增加max_digits,但这并没有帮助。--我已经手动删除了postgreSQL数据库中的模型,希望能够在迁移模型时重新创建它,但是仍然会遇到同样的错误,无法迁移模型并在数据库中重新创建模型。

这就是所讨论的模式:

代码语言:javascript
复制
class Version(models.Model):
    version_number = models.DecimalField(default=1.0, max_digits=3,
                                     decimal_places=2)

我能做些什么来补救这个问题?

编辑当我更改DecimalField时更改了max_digits

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-08 11:30:15

似乎您的问题实际上不是DecimalField的问题,而是手动删除表作为故障排除的步骤。

据我所知,makemigrations工具没有根据现有数据库中的内容进行更改,而是根据先前迁移中定义的内容进行更改。

因此,如果您不使用它而进行更改,则必须手动创建或编辑迁移文件来更正它。

有关编辑迁移文件的示例,请参阅以下内容:

https://docs.djangoproject.com/en/1.8/howto/writing-migrations/

我不知道这里的协议是什么,但可能会找到首先创建表的迁移,并将适用的序列复制到挂起的迁移文件中。

票数 5
EN

Stack Overflow用户

发布于 2015-07-08 10:50:50

好的,在这里设置默认值有问题:

你需要导入十进制。

代码语言:javascript
复制
from decimal import Decimal
class Version(models.Model):
    version_number = models.DecimalField(default=Decimal('1.00'), max_digits=3,
                                     decimal_places=2)
票数 2
EN

Stack Overflow用户

发布于 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 (这也不是该模型字段的最新值)。所以我开始研究这些功能,发现其中一个早期的迁移导致了这一切。

我将与该模型字段相关的迁移和所有其他迁移更改为最近的版本,并进行了修复

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31290125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档