Django执行migrate命令报ValueError: bid字段期望数字却得到空字符串求解
问题根源
错误出在自动生成的迁移文件auctions.0005_auto_20211019_1227中,你为Bid模型新增的bid字段是整型IntegerField,但设置的默认值为空字符串'',数值类型字段无法接收字符串类型的默认值,导致迁移执行时类型转换失败抛出报错:
# 错误代码片段 migrations.AddField( model_name='bid', name='bid', field=models.IntegerField(default=''), ),
同时存在两个附带问题需要同步修正:
- 你当前
models.py中Bid模型的出价字段实际命名为p_bid,说明你新增bid字段后又修改了字段名,旧的错误迁移文件未被清理 Bid模型的__str__方法中引用了不存在的bid属性,后续调用该方法时会触发属性不存在错误
解决步骤
- 清理错误迁移文件:删除
auctions/migrations/目录下的0005_auto_20211019_1227.py文件,若有版本号高于0005的其他迁移文件也一并删除,注意不要删除目录下的__init__.py文件 - 修正
Bid模型的__str__方法:
class Bid(models.Model): p_bid = models.IntegerField() user = models.ForeignKey(User, on_delete=CASCADE) auction = models.ForeignKey(AuctionListing, on_delete=CASCADE) bid_date = models.DateTimeField(timezone.now) # 将self.bid修改为实际存在的字段self.p_bid def __str__(self): return '%s' % (self.p_bid)
- 重新生成迁移文件:执行命令
python manage.py makemigrations - 执行迁移:执行命令
python manage.py migrate
即可正常完成迁移操作。
内容的提问来源于stack exchange,提问作者Saif Khan
相关产品推荐
相关产品推荐

