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

运行pytest时触发Django ProgrammingError:关联关系不存在

解决 Django pytest 中出现的 django.db.utils.ProgrammingError: relation "" does not exist 错误

针对你遇到的这个错误,以下是几个可能的排查方向和解决办法:

1. 确认 Group 外键的引用正确性

你的 Account 模型中使用了 Group 外键,首先确保已正确导入 Django 内置的 Group 模型:

from django.contrib.auth.models import Group

如果导入路径错误,或者项目中存在自定义的 Group 模型但未正确配置,可能会导致 Django 无法解析关联的表名,进而出现空关系名的错误。

2. 检查 pytest 测试数据库的迁移状态

pytest-django 默认会为测试创建独立的数据库,但有时可能未自动应用迁移。可以尝试:

  • 运行测试时添加 --create-db 参数,强制重新创建测试数据库并应用所有迁移:
    pytest --create-db
    
  • 检查 pytest.ini 或 conftest.py 中的配置,确保没有禁用迁移自动应用的设置。

3. 验证模型的表名生成逻辑

虽然你的模型没有定义 Meta 类,但 Django 会默认使用 app_label_modelname 作为表名。请确认:

  • 包含 Account 模型的应用已添加到 settings.py 的 INSTALLED_APPS 中;
  • 应用名称没有拼写错误,避免 Django 无法正确生成表名。

4. 排查自定义管理器或信号中的问题

你的 Account 模型使用了自定义的 AccountManager,检查管理器中是否有提前访问数据库的逻辑(比如在初始化时执行查询),这可能导致在测试数据库迁移完成前尝试访问表,引发错误。

另外,检查项目中是否有针对 Account 模型的信号,比如 post_save 或 pre_save,如果信号逻辑在表创建前执行,也可能触发该错误。

5. 彻底重置测试环境

即使你已经重置过迁移,尝试以下更彻底的步骤:

  1. 删除所有应用下的迁移文件(保留 __init__.py);
  2. 手动删除测试数据库(如果使用 SQLite,直接删除 .db 文件;如果是 PostgreSQL/MySQL,执行删库命令);
  3. 重新生成迁移:
    python manage.py makemigrations
    
  4. 应用迁移到主数据库:
    python manage.py migrate
    
  5. 再次运行 pytest:
    pytest
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:53:22