
在非 django 项目主目录下(如独立 `main.py`)使用 `django.setup()` 时,需手动配置 python 路径与 `django_settings_module`,否则即使 `installed_apps` 已注册 `model_db`,python 仍无法定位该模块。
要在 Django 项目外部(例如根目录下的 main.py)成功导入并使用 model_db 中的模型,关键不在于 settings.configure() —— 而在于让 Django 正确识别项目结构和 Python 模块路径。你当前的写法:
from DATABASE.Django_ORM.Django_ORM import settings as st settings.configure(default_settings=st, DEBUG=True)
存在两个根本性问题:
- settings.configure() 仅适用于极简、无第三方 App 依赖的场景:它绕过了 Django 的完整初始化流程(如 apps.ready、App 注册、模型扫描等),导致 INSTALLED_APPS 中声明的 model_db 不会被自动发现和加载;
- Python 解释器无法解析 model_db 模块路径:尽管 model_db 在 Django_ORM/Django_ORM/settings.py 中已加入 INSTALLED_APPS,但 main.py 所在位置不在 Python 的 sys.path 中,且未设置 DJANGO_SETTINGS_MODULE 环境变量,因此 django.setup() 无法定位到 model_db 包。
✅ 正确做法是:模拟 Django 命令行环境,即通过 os.environ.setdefault("DJANGO_SETTINGS_MODULE", ...) 显式指定设置模块路径,并确保项目根目录(含 manage.py 的同级目录)在 sys.path 中。
根据你的目录结构(DATABASE/Django_ORM/ 是 Django 项目根,其中 Django_ORM/Django_ORM/settings.py 是设置文件),请在 main.py 中使用以下标准初始化方式:
import os
import sys
import django
from django.conf import settings
# Step 1: 将 Django 项目根目录(即 manage.py 所在目录)加入 Python 路径
django_root = os.path.join(os.path.dirname(__file__), 'DATABASE', 'Django_ORM')
sys.path.append(django_root)
# Step 2: 设置 DJANGO_SETTINGS_MODULE 环境变量(指向 settings 模块的 Python 路径)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Django_ORM.settings')
# Step 3: 初始化 Django(必须在导入任何 models 之前调用)
django.setup()
# ✅ 现在可以安全导入 model_db 中的模型
from model_db.models import YourModel # 注意:直接 from model_db import models 也可,但推荐明确导入具体模型? 注意事项:
- os.environ.setdefault(...) 必须在 django.setup() 之前调用,且值为 Python 导入路径格式(如 'Django_ORM.settings'),而非文件系统路径;
- sys.path.append(django_root) 确保 Django_ORM 包可被导入;若 DATABASE/ 目录下缺少 __init__.py,建议补上(虽非强制,但可避免潜在包识别问题);
- 不要混用 settings.configure() 和 DJANGO_SETTINGS_MODULE —— 二者互斥,后者是官方推荐的标准方式;
- 首次运行前,请确认已在 DATABASE/Django_ORM/ 下执行过 python manage.py makemigrations && python manage.py migrate,确保数据库表已就绪。
? 提示:为便于维护,可将上述初始化逻辑封装为 django_setup.py 工具模块,在多个外部脚本中复用。一旦配置正确,model_db 及其模型即可像在 shell 或视图中一样正常使用。










