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

技术求助:因Apps未加载导致Pytest无法导入models

解决Pytest测试中Django Models导入报错“Apps aren't loaded yet”的问题

嘿,我来帮你搞定这个Django+Pytest的坑!这个报错本质是在Django的应用还没完成初始化时,就尝试导入了models,下面结合你的项目结构给出具体解决方案:

一、先确认pytest.ini配置正确

你的项目根目录下(nas_apps文件夹里)已经有pytest.ini,要确保它指向正确的Django配置文件:

[pytest]
DJANGO_SETTINGS_MODULE = nas_apps.settings
python_files = test_*.py

这个配置的作用是告诉pytest:“我要基于Django项目运行,用nas_apps.settings作为配置文件”。

二、用conftest.py初始化Django

在你的tests/conftest.py里添加Django初始化代码,确保pytest启动前先加载所有Django应用:

import pytest
import django
from django.conf import settings

def pytest_configure():
    # 如果配置未加载,就加载项目的settings
    if not settings.configured:
        # 直接导入项目已有的配置
        from nas_apps.settings import *
    # 初始化Django,加载所有apps
    django.setup()

这段代码会在pytest运行任何测试前,先完成Django的初始化流程,让所有注册的应用都被加载。

三、检查settings.py的INSTALLED_APPS

确保nas_apps/settings.py里已经把需要测试的应用加入到INSTALLED_APPS中:

INSTALLED_APPS = [
    # Django默认自带的应用,比如django.contrib.admin之类的
    'django.contrib.contenttypes',
    'django.contrib.auth',
    # 你的业务应用
    'usecase1',
    # 如果要测试usecase2、usecase3也需要加上
    # 'usecase2',
    # 'usecase3',
]

如果应用没在这里注册,Django初始化时不会加载它,自然会导致models导入失败。

四、正确导入models的姿势

做完上面的配置后,你就可以在测试文件(比如test_usecase1.py)顶部正常导入models了:

from usecase1.models import YourModel

def test_model_creation():
    obj = YourModel.objects.create(...)
    assert obj.id is not None

如果之前是因为提前导入导致报错,现在Django已经初始化完成,就不会再出现“Apps aren't loaded yet”的提示了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:29:06