You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 06:32:32