Django添加模型字段遇OperationalError及makemigrations报错求助
解决Django添加字段时的OperationalError与makemigrations报错问题
问题根源
给已有数据的模型添加非空字段money时,数据库需要为现有行填充该字段的值,但你既没在模型中设置默认值,也没允许字段为空,导致makemigrations无法生成迁移文件;同时因为数据库未同步新增字段,访问admin页面时触发OperationalError(找不到money列)。
具体解决方案
方案1:修改模型设置默认值或允许字段为空
根据业务需求二选一:
- 若
money字段必须有值,给字段添加default参数:
class CourseModel(models.Model): cname = models.CharField(max_length=15) dur = models.IntegerField() fee = models.IntegerField() money = models.IntegerField(default=0) # 默认值可根据业务调整
- 若业务允许
money为空,设置null=True和blank=True:
class CourseModel(models.Model): cname = models.CharField(max_length=15) dur = models.IntegerField() fee = models.IntegerField() money = models.IntegerField(null=True, blank=True)
修改后执行以下命令同步数据库:
python manage.py makemigrations python manage.py migrate
方案2:执行makemigrations时提供一次性默认值
无需修改模型,执行python manage.py makemigrations时,选择选项1,输入一个默认值(比如0),之后执行python manage.py migrate完成数据库同步。
注意事项
必须完成migrate操作后,再访问/admin/app1/coursemodel/页面,否则仍会出现OperationalError。
内容的提问来源于stack exchange,提问作者dhanugadu
相关产品推荐
相关产品推荐

