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
相关产品推荐
相关产品推荐

