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

Django REST Framework测试报relation 'user'不存在错误

问题描述

参照Django REST Framework官方文档指引编写并执行测试用例时,无论测试什么功能模块,始终会抛出相同的数据库报错。

测试用例示例

class TestRequestFactory(APITestCase):

    def test_request(self):
        factory = APIRequestFactory()
        request = factory.post('/list_user/', json.dumps({'title': 'new idea'}), content_type='application/json')

报错信息

django.db.utils.ProgrammingError: relation "user" does not exist LINE
 1: ...ted_by", "user"."created_ts", "user"."is_active" FROM "user"

已尝试的无效操作

  • 执行manage.py migrate
  • 执行manage.py migrate --fake bots zero
    查阅大量技术资料找到的通用解决方案均已尝试,问题始终未解决,依旧抛出相同错误。

根因与修复方案

这个报错本质是程序运行时找不到名为user的数据库表,常规迁移命令无效说明问题不在本地开发库的迁移状态,按以下顺序排查即可:

  • 检查自定义用户模型配置
    打开项目settings.py文件,确认存在AUTH_USER_MODEL = 'User模型所在app名.User'配置。如果漏写该配置,Django会默认查找内置的auth_user表,和自定义的user表名不匹配,就会报表不存在错误。
  • 排查全局提前触发的查询逻辑
    你写的测试代码本身仅构造请求对象,没有执行视图逻辑,但如果项目配置了全局中间件、全局权限校验类,会在请求初始化阶段就查询用户表。如果此时测试环境未完成对应表的创建,就会直接抛错。可以给这类全局逻辑加测试环境跳过判断,或者在测试用例中提前mock用户查询逻辑。
  • 重置损坏的迁移文件
    带--fake参数的迁移命令很容易打乱迁移记录,直接按步骤重置即可:
    1. 删除所有app目录下migrations文件夹中除__init__.py之外的所有文件
    2. 删除本地数据库文件(使用sqlite则直接删除db.sqlite3,使用MySQL/PostgreSQL则删除对应库后重建)
    3. 依次重新执行python manage.py makemigrations、python manage.py migrate
  • 校验测试数据库配置
    如果你手动为测试环境配置了固定数据库名,检查settings.py中数据库配置的TEST字段是否正确,不要指向未执行过迁移的空库。使用Django默认测试配置时,框架会自动创建临时测试库、执行完全部迁移后再运行用例,只要迁移文件正常就不会出现该报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:09:23