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

Django执行migrate报错:NOT NULL约束失败,求解决方案

问题分析与解决步骤

1. 先修正模型的明显错误

你的Image类里的字符串展示方法写错了,应该是双下划线的__str__,不是单下划线的_str_,先改过来:

class Image(models.Model):
    name = models.CharField(max_length=50, default=None)
    phone = models.TextField(max_length=10, default=None)
    img = models.ImageField(upload_to='images/', default=None)

    def __str__(self):  # 这里改成双下划线
        return self.name

2. 解决makemigrations显示“No changes detected”的问题

  • 确认app已注册:检查项目根目录settings.py里的INSTALLED_APPS,确保home已经在列表中:
    INSTALLED_APPS = [
        ...
        'home',
        ...
    ]
    
  • 重置迁移文件(谨慎操作,先备份数据库):
    1. 删除home/migrations目录下除__init__.py外的所有文件
    2. 执行python manage.py makemigrations home,指定app生成新迁移
    3. 执行python manage.py migrate --fake-initial,让Django标记初始迁移已完成(适合数据库中已有对应表的情况)

3. 解决NOT NULL constraint failed: new__home_image.desc错误

这个错误说明迁移时涉及到desc字段的非空约束,但当前模型里没有这个字段,大概率是旧迁移文件残留了该字段的操作:

  • 检查迁移文件:打开home/migrations下的所有文件,找出包含desc字段定义/修改的内容,确认是否是废弃操作
  • 手动同步数据库与迁移状态:
    1. 登录数据库(比如sqlite3、MySQL),查看home_image表是否存在desc字段,如果不需要就直接删除
    2. 执行python manage.py migrate --fake,让Django同步迁移状态到最新

4. 通用排查手段

  • 执行python manage.py showmigrations home,查看该app的迁移应用状态
  • 执行python manage.py sqlmigrate home <迁移编号>,查看具体迁移的SQL语句,定位desc字段相关操作

内容的提问来源于stack exchange,提问作者Bipin Poudel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:43:20