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

Django单元测试报错:auth_user不存在的本地问题求助

解决测试时出现psycopg2.ProgrammingError: relation "auth_user" does not exist的问题

兄弟,我之前也踩过一模一样的坑!结合你说的情况——开发环境跑runserver和migrations都正常、仓库同步到最新版别人没问题,那大概率是测试数据库的初始化出了问题,或者测试代码的执行时机有bug。给你几个针对性的排查和解决步骤:

  • 彻底重置测试数据库
    Django的测试环境会用单独的数据库,有时候这个库会残留旧数据或者迁移没跑全。直接试试强制重新创建测试库并执行所有迁移:

    python manage.py test --noinput
    

    要是之前用过--keepdb参数保留测试数据库,可能会有脏数据残留,这时候可以手动删了测试库再重新跑:

    # 替换成你的PostgreSQL用户名,进入命令行
    psql -U your_db_username
    # 测试库名称一般是test_加上你的主数据库名
    DROP DATABASE test_your_main_db_name;
    \q
    # 重新运行测试,Django会自动新建测试库并执行所有迁移
    python manage.py test
    
  • 检查测试用例是否提前触发了数据库操作
    要是你的测试代码里,在模块导入阶段或者setUpClass这类早于迁移执行的时机就访问了数据库(比如直接查询Profile关联的User),这时候测试库还没创建auth_user表,肯定会报错。
    一定要确保所有数据库操作都放在TestCase的测试方法里,而且要用django.test.TestCase(它会自动帮你处理迁移和数据库隔离),别用SimpleTestCase——它压根不处理数据库相关的逻辑。

  • 确认Profile模型的迁移依赖
    打开grams app的初始迁移文件(grams/migrations/0001_initial.py),看看dependencies里有没有包含auth的迁移。如果没有,手动加上:

    dependencies = [
        ('auth', '__latest__'),
        # 其他依赖项
    ]
    

    然后重新生成并应用迁移:

    python manage.py makemigrations grams
    python manage.py migrate grams
    

    这样测试时Django就会先执行auth的迁移,再跑grams的迁移,不会出现表不存在的问题。

  • 检查测试命令的参数
    如果你只测试grams这个app,记得加上--migrate参数,确保Django在测试前执行所有app的迁移:

    python manage.py test grams --migrate
    

    不然可能只跑了grams的迁移,没跑auth的,自然找不到auth_user表。

按这个流程走,应该能解决你的问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:59:09