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

无法执行python manage.py migrate的Django问题求助

Django迁移报错:Model未声明app_label且不在INSTALLED_APPS中

我正在搭建一个基于Django的网站,用虚拟环境测试。创建项目时发现缺少settings.py文件,之前因此报了一堆错,我用基础示例添加了该文件并做了修改,之后又在settings.py里加入了django.contrib.sites,但问题还是没解决。

我执行了以下命令:

pip install -r req.txt

尝试运行迁移命令时:

python manage.py migrate

出现了如下错误:

Traceback (most recent call last):
  File "C:\Users\osnys\OneDrive\Skrivebord\nordicusv\manage.py", line 22, in <module>
    main()
  File "C:\Users\osnys\OneDrive\Skrivebord\nordicusv\manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\management\__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\management\__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\management\base.py", line 412, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\management\base.py", line 458, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\management\base.py", line 106, in wrapper
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\management\commands\migrate.py", line 100, in handle
    self.check(databases=[database])
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\management\base.py", line 485, in check
    all_issues = checks.run_checks(
                 ^^^^^^^^^^^^^^^^^^
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\checks\registry.py", line 88, in run_checks
    new_errors = check(app_configs=app_configs, databases=databases)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\checks\urls.py", line 14, in check_url_config
    return check_resolver(resolver)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\core\checks\urls.py", line 24, in check_resolver
    return check_method()
           ^^^^^^^^^^^^^^
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\urls\resolvers.py", line 494, in check
    for pattern in self.url_patterns:
                   ^^^^^^^^^^^^^^^^^
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\utils\functional.py", line 57, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
                                         ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\urls\resolvers.py", line 715, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
                       ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\utils\functional.py", line 57, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
                                         ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\urls\resolvers.py", line 708, in urlconf_module
    return import_module(self.urlconf_name)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "C:\Users\osnys\OneDrive\Skrivebord\nordicusv\demo\urls.py", line 2, in <module>
    from apps.core.views import *
  File "C:\Users\osnys\OneDrive\Skrivebord\nordicusv\apps\core\views.py", line 16, in <module>
    from .forms import OrderForm
  File "C:\Users\osnys\OneDrive\Skrivebord\nordicusv\apps\core\forms.py", line 3, in <module>
    from .models import Order
  File "C:\Users\osnys\OneDrive\Skrivebord\nordicusv\apps\core\models.py", line 8, in <module>
    class Order(models.Model):
  File "C:\Users\osnys\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\db\models\base.py", line 134, in __new__
    raise RuntimeError(
RuntimeError: Model class apps.core.models.Order doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

我的settings.py配置如下:

import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

SECRET_KEY = 'ga=-j1+6uv^bvcr1da*!a9z)w3_!+u3c!2c*-fwct8e0@bvzl%'

DEBUG = True

ALLOWED_HOSTS = []

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',

    # Add your custom apps here
]

SITE_ID = 1

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XContentOptionsMiddleware',
]

ROOT_URLCONF = 'demo.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'your_project.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

解决方法

1. 注册自定义app到INSTALLED_APPS

错误提示很明确:你的apps.core这个app没在INSTALLED_APPS里注册,所以Django找不到模型所属的app。直接修改settings.py里的INSTALLED_APPS,把注释行换成你的app路径:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',

    # 注册你的自定义app
    'apps.core',
]

2. (可选)用AppConfig类注册更规范

如果你的apps/core目录下有apps.py文件,里面定义了CoreConfig类(Django创建app时自动生成的),可以用完整路径注册:

# apps/core/apps.py内容示例
from django.apps import AppConfig

class CoreConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'apps.core'

然后在INSTALLED_APPS里加:

INSTALLED_APPS = [
    # ... 内置app
    'apps.core.apps.CoreConfig',
]

3. 修正WSGI_APPLICATION配置(避免后续报错)

你的settings.py里WSGI_APPLICATION写的是'your_project.wsgi.application',这是默认占位符,要改成你的项目名(从manage.py和urls.py的路径看,项目名是demo):

WSGI_APPLICATION = 'demo.wsgi.application'

4. (不推荐的临时方案)给模型加app_label

如果暂时不想注册app,可以在Order模型里手动指定app_label,但这不是标准做法,不推荐长期使用:

# apps/core/models.py
class Order(models.Model):
    # 你的模型字段...
    
    class Meta:
        app_label = 'core'

完成以上修改后,重新运行python manage.py migrate应该就能正常执行了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:17:44