Django DecimalField序列化失败:执行makemigrations报ValueError错误
解决Django中DecimalField引发的
ValueError: Cannot serialize: Ellipsis错误 我之前也碰到过一模一样的问题,原因其实很清晰:
你在定义模型的DecimalField时用了省略号...作为占位符,就像这段代码里这样:
class MyClass(models.Model): price = models.DecimalField(..., max_digits=5, decimal_places=2)
Django的迁移系统需要把所有字段参数序列化后写入迁移文件,但它没办法处理...这个特殊符号,所以执行python manage.py makemigrations时就会抛出那个序列化错误。
解决办法
直接把字段里的...删掉就行。DecimalField如果用关键字参数传递max_digits和decimal_places的话,不需要必填的位置参数(也就是verbose_name),修改后的代码可以是这样:
class MyClass(models.Model): price = models.DecimalField(max_digits=5, decimal_places=2)
要是你想给字段加个友好的后台显示名称,也可以补上verbose_name:
class MyClass(models.Model): price = models.DecimalField("商品价格", max_digits=5, decimal_places=2)
改完之后再运行python manage.py makemigrations,就能正常生成迁移文件了。
额外补充:Django迁移的核心要求是所有模型字段的参数都能被序列化存储,像...这种占位符不符合序列化规则,所以才会触发这个报错。
内容的提问来源于stack exchange,提问作者Ilan
相关产品推荐
相关产品推荐

