获取单条CustomUser数据时出现‘CustomUser对象不可迭代’错误
问题原因
get_queryset方法返回的是单个CustomUser对象,而Django REST Framework的GenericAPIView要求该方法返回可迭代的QuerySet对象。当ListModelMixin或RetrieveModelMixin尝试处理这个单个对象时,就会触发“'CustomUser' object is not iterable”错误。
修复方案
将get_queryset修改为返回QuerySet而非单个实例,同时直接利用已认证的request.user构造查询集:
修改后的views.py
class profiledata(mixins.RetrieveModelMixin, mixins.ListModelMixin, generics.GenericAPIView): serializer_class = UserSerializer lookup_field = 'id' authentication_classes = [ JWTAuthentication, TokenAuthentication, SessionAuthentication, BasicAuthentication] permission_classes = [IsAuthenticated, ] def get_queryset(self): # 返回当前用户的QuerySet,确保可迭代 return CustomUser.objects.filter(pk=self.request.user.pk) def get(self, request, id=None): if id: return self.retrieve(request) else: return self.list(request)
补充说明
- 使用
filter(pk=self.request.user.pk)替代get,既保证了返回结果可迭代,又通过主键查询确保了唯一性和查询效率。 - 若业务要求用户仅能查看自身信息,此修改后即使传入其他用户ID,接口也会返回404,符合权限限制逻辑。
内容的提问来源于stack exchange,提问作者Srikanta saw
相关产品推荐
相关产品推荐

