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

Django执行makemigrations未识别新模型,提示"No changes detected"

Django makemigrations提示"No changes detected"?试试这几个排查步骤

碰到这种情况确实挺闹心的——明明写了新模型,Django却完全没识别到。我帮你梳理几个最常见的原因和对应的解决办法,一步步来应该就能搞定:

  • 第一步:检查应用是否加入了INSTALLED_APPS
    这是新手最容易踩的坑!你用manage.py startapp supplier创建了应用,但Django不会自动把它加到项目配置里。打开项目根目录的settings.py,找到INSTALLED_APPS列表,把'supplier'添加进去,示例:

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        # 新增这一行,别忘了末尾的逗号
        'supplier',
    ]
    
  • 第二步:确认模型定义没有语法错误
    检查你的supplier/models.py,确保模型正确继承了models.Model,且字段定义没有语法问题。比如一个标准的模型写法应该是这样的:

    from django.db import models
    
    class Supplier(models.Model):
        name = models.CharField(max_length=100)
        contact_email = models.EmailField(blank=True)
    
        def __str__(self):
            return self.name
    

    要是少了models.Model继承,或者字段的括号没闭合、参数写错,Django会直接忽略这个模型。

  • 第三步:指定应用名称执行migrations
    有时候全局扫描可能会漏掉你的应用,试试直接指定supplier来生成迁移文件:

    python manage.py makemigrations supplier
    

    这个命令会强制Django只关注supplier应用的模型变化,大概率能触发迁移文件生成。

  • 第四步:检查migrations目录是否存在
    看看supplier应用下有没有migrations文件夹,里面有没有__init__.py文件。如果没有的话,手动创建一个空的migrations文件夹,再在里面新建一个空的__init__.py文件(这个文件是让Python把migrations当成模块识别的关键),然后再执行makemigrations。

  • 第五步:清除迁移缓存(谨慎操作)
    如果上面的方法都没用,可能是旧的迁移缓存搞鬼了。这时候可以:

    1. 删除supplier/migrations目录下除了__init__.py之外的所有文件
    2. 如果你用的是SQLite,备份好db.sqlite3之后删除它(其他数据库的话可以清空对应的迁移表)
    3. 重新执行python manage.py makemigrations和python manage.py migrate

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:27:27