Django执行makemigrations报错求助:添加非空字段无默认值
解决Django makemigrations时的非空字段默认值问题
嘿,我来帮你搞定这个迁移小麻烦!
先理清楚报错原因:你现在要给已有的item模型加一个非空的category字段,但数据库里已经存着item表的旧数据了——数据库不知道该给这些旧行的category列填什么值,所以才让你选修复方式。既然你选了临时提供默认值,那接下来就根据category的字段类型,输入对应的Python格式默认值就行:
不同字段类型的默认值示例
如果
category是字符串类型(CharField):
直接输入带引号的字符串,比如:'默认分类'注意必须加引号,这是Python字符串的语法要求哦。
如果
category是外键(ForeignKey):
假设关联的模型是Category,且数据库里已经有现成的分类(比如id为1的记录),可以输入:Category.objects.get(id=1)要是还没有现成分类,也可以直接创建新的:
Category.objects.create(name='默认分类')如果
category是日期时间类型(你提到了时区模块,顺便提这种情况):
可以用Django的时区工具获取当前时间,输入:django.utils.timezone.now别加括号,Django会自动调用这个函数生成时间;要是想设固定时间,就写:
datetime.datetime(2024, 5, 20, tzinfo=django.utils.timezone.utc)
小提醒
- 不确定
category字段类型的话,先去models.py里看它的定义,比如是models.CharField(max_length=100)还是models.ForeignKey(...) - 输入完默认值按回车,Django会自动生成迁移文件,之后执行
migrate命令就能更新数据库了 - 中途改主意的话,输入
exit就能退出提示,回头去模型里给category加default参数也完全可以
内容的提问来源于stack exchange,提问作者Jonathan Prieto
相关产品推荐
相关产品推荐

