Django给Comment模型添加非空name字段迁移无默认值报错如何解决
问题根因
报错提示的是你给Comment模型新增的name字段是非空字段,但是你的数据库中已经存在历史的Comment记录,Django不知道给这些旧记录的name字段填充什么值,所以抛出错误。
你之前修改的是body字段的配置,和报错的name字段无关,所以修改不生效。
解决方案
方案1:需要保留历史Comment数据
二选一操作即可:
- 执行迁移命令出现选择提示时,直接选选项1,输入一次性的默认值(比如
'匿名用户'),所有旧记录的name字段会自动填充为该值 - 在
models.py中给name字段添加默认值配置,示例:
name = models.CharField(max_length=255, default="匿名")
执行完迁移后如果不需要默认值,删掉该配置重新执行迁移即可。
方案2:不需要保留历史Comment数据
如果是开发环境没有历史数据保留需求,可以直接:
- 删掉
migrations目录下本次新增的未生效的迁移文件(不要删除__init__.py) - 清空数据库中的
Comment表,或者直接重建数据库 - 重新执行
python manage.py makemigrations和python manage.py migrate命令即可
内容的提问来源于stack exchange,提问作者Squidward
相关产品推荐
相关产品推荐

