无法执行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
相关产品推荐
相关产品推荐

