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

获取单条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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:03:15