python/Django中的十进制数
我试图在数据库中插入,但似乎小数有问题 我有python/Django中的十进制数,python,django,django-models,decimal,Python,Django,Django Models,Decimal,我试图在数据库中插入,但似乎小数有问题 我有纬度和经度,例如: latitude = models.DecimalField(max_digits=30, decimal_places=15) 然后,当我尝试插入时,我会写: Place(name="center", description="study center", latitude=41.214555, longitude=2.121451) 但我得到了一个错误:“量化结果对于当前上下文有太多的数字” 我应该能得到那些数字,对吗?我不
纬度
和经度
,例如:
latitude = models.DecimalField(max_digits=30, decimal_places=15)
然后,当我尝试插入时,我会写:
Place(name="center", description="study center", latitude=41.214555, longitude=2.121451)
但我得到了一个错误:“量化结果对于当前上下文有太多的数字”
我应该能得到那些数字,对吗?我不明白为什么我会犯那个错误。如果有人能帮助我,我将非常感激。考虑到这种模式:
class Place(models.Model):
name = models.TextField()
description = models.TextField()
longitude = models.DecimalField(max_digits=30, decimal_places=15)
latitude = models.DecimalField(max_digits=30, decimal_places=15)
这应该有效(允许使用的最大位数和小数位数):
这应该失败(值超过顶部):
在更改Django代码后,请确保相应地迁移/更改了数据库。请查看以下内容:您确定数据库已正确迁移吗?,,只是为了确定是什么提示您需要迁移?以MySQL为例,十进制列按如下方式添加:创建表my_TABLE(my_column decimal(6,4)UNSIGNED NOT NULL);Django遵循规范,因此在创建列时,它会使用
max\u digits
和decimal\u places
的值来创建正确的列。如果这些值发生了更改,则应相应地更改数据库。仍然不清楚您需要迁移的原因,因为OP没有提到他更改了这些值。假设您最初将max_digits
设置为6,并且decimal_places
设置为4,则您的数据库将十进制列定义为decimal(6,4)。在数据库架构中将Django代码更改为15、15(对于max_digits
和decimal_places
)后,该列仍定义为十进制(6,4)。若您试图插入到数据库中的数据不符合这些定义,数据库会向Django“抱怨”,所以您会得到一个错误。这就是为什么需要迁移,以便使模式列与Django代码定义同步。
p = Place(
name='Name',
description='Description',
latitude=0123456789012345.0123456789012345,
longitude=0123456789012345.0123456789012345
)
p.save()
p = Place(
name='Name',
description='Description',
latitude=01234567890123456.01234567890123456,
longitude=01234567890123456.01234567890123456
)
p.save()