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

DRF APITestCase中force_authenticate后request.user返回元组而非User对象

问题原因及解决方法

问题原因

User.objects.get_or_create() 方法的返回值是一个元组,格式为 (用户对象, 是否创建了新用户)(也就是你看到的 (<User: User(143)>, True))。你直接把这个元组赋值给 self.user 并传入 force_authenticate 方法后,DRF 会将这个元组直接赋值给 request.user,而非预期的 User 对象,后续代码处理 request.user 时会因类型不匹配抛出错误。

解决方法

从 get_or_create 的返回值中提取第一个元素(实际的 User 对象),忽略第二个表示是否创建的布尔值:

def setUp(self):
    # 用下划线接收第二个返回值,表示不需要使用这个变量
    self.user, _ = User.objects.get_or_create(username="test_user")
    self.client.force_authenticate(user=self.user)

这样 self.user 就是正确的 User 实例,传入 force_authenticate 后,request.user 会恢复为正常的 User 对象,接口即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:01:26