首页 文章

如何将Decimal指定为Django South迁移的一次性值

提问于
浏览
1

我在我的模型中添加了一个DecimalField

dec_field = models.DecimalField(max_digits=6, decimal_places=3)

在我尝试使用South创建自动模式迁移文件后,我尝试指定现在用于现有列的一次性值,但是......

? Please enter Python code for your one-off default value.
? The datetime module is available, so you can do e.g. datetime.date.today()
>>> Decimal('15.4')
! Invalid input: name 'Decimal' is not defined
>>> from decimal import *
! Invalid input: invalid syntax (<string>, line 1)

我可以指定一个Decimal默认值(无损,所以float不理想),如果是这样的话怎么样?

2 回答

  • 1

    看代码:: https://bitbucket.org/andrewgodwin/south/src/81b93bfc927b46227103d094691b5ddcfc25f400/south/creator/actions.py?at=default#cl-190

    我试过这样做:

    __import__('decimal').Decimal('0.445')
    

    并且工作

    但这很奇怪,最正确的只是把它自动转换成一个字符串

    或导入十进制,因为南迁移创建

  • 3

    接受的答案确实很奇怪 .

    正确的答案是,根据设计,南方迁移是用户可编辑的,并且 schemamigration --auto 并不总能完成一项完美的工作 . 在这种情况下,我只需输入一个易于在文件中找到的值(例如, '0.445' ),然后编辑文件,为 Decimal 添加正确的导入并修改代码以使用 Decimal('0.445') 而不是生成的迁移中的值 .

相关问题