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

Django 1.11迁移文件用特定模型时pytest测试失败

解决Django迁移在pytest中出现KeyError: 'my_other_app'的问题

我之前也碰到过完全类似的情况,你的问题核心在于pytest测试环境没有正确加载my_other_app的应用配置——虽然python manage.py migrate能正常运行,但测试环境的应用加载逻辑和正式迁移场景有差异。下面给你几个针对性的解决办法:

1. 检查测试配置里的INSTALLED_APPS

首先确认你的测试环境配置文件(比如pytest.ini、conftest.py,或者专门的test_settings.py)中,my_other_app已经被添加到INSTALLED_APPS列表里:

INSTALLED_APPS = [
    # 其他已有的应用
    'my_other_app',
]

如果测试环境没注册这个应用,apps.get_model()自然找不到对应的应用配置,就会抛出KeyError。

2. 补全迁移文件的依赖关系

你的迁移文件只依赖了contracts应用的迁移,但实际上你用到了my_other_app的模型,必须把这个应用的迁移也加入依赖列表,这样Django在运行迁移时会确保my_other_app的配置已加载,同时测试环境也会同步识别到这个依赖:

class Migration(migrations.Migration):
    dependencies = [
        ('contracts', '0014_my_previous_migration'),
        ('my_other_app', '0001_initial'),  # 替换成my_other_app实际的初始迁移文件名
    ]
    # ... 其他代码不变

这一步能保证你的迁移在执行前,my_other_app的迁移已经完成,应用配置也被正确初始化。

3. 手动注册应用配置(临时兜底方案)

如果上面两个方法都没解决问题,可以在conftest.py中添加一段代码,强制在pytest启动时注册my_other_app的配置:

from django.apps import apps
from my_other_app.apps import MyOtherAppConfig

def pytest_configure():
    if not apps.is_installed('my_other_app'):
        apps.register_app_config(MyOtherAppConfig)

这个方法会在测试启动时检查应用是否已安装,未安装则手动注册它的配置类。

另外提个小细节:你迁移代码里的MyOtherModel.get()应该是MyOtherModel.objects.get()吧?这大概率是示例笔误,但如果实际代码也是这样,后续可能会触发AttributeError,记得修正~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:52:36