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

Django中ModelViewSet用Model.objects.get报'User'对象不可迭代错误求助

问题原因与解决思路

错误根源

ModelViewSet要求get_queryset方法返回可迭代的QuerySet对象,但你当前用User.objects.get(id=self.request.user.id)返回的是单个User实例,不属于可迭代类型,因此触发"'User' object is not iterable"错误。

解决方案

方案1:修正get_queryset返回QuerySet

将get替换为filter,返回仅包含当前用户的QuerySet:

class UserProfile(viewsets.ModelViewSet):
    permission_classes = (IsAuthenticated,)
    serializer_class = UserSerializer

    def get_queryset(self):
        # filter返回可迭代的QuerySet
        return User.objects.filter(id=self.request.user.id)

此方案保留ModelViewSet的完整功能,但列表接口会返回长度为1的用户数组,详情接口可正常返回单个用户数据。

方案2:改用更匹配需求的视图类

如果该接口仅用于获取当前用户的个人信息,RetrieveAPIView比ModelViewSet更合适(后者包含增删改查全量动作,冗余性高):

from rest_framework.generics import RetrieveAPIView

class UserProfile(RetrieveAPIView):
    permission_classes = (IsAuthenticated,)
    serializer_class = UserSerializer

    def get_object(self):
        # 直接返回当前请求的用户对象,无需重复查询数据库
        return self.request.user

此方案更简洁高效,完全匹配你获取单用户数据的需求。

额外提示

你的models.py中重复定义了is_verified字段,需删除其中一个,否则会导致数据库迁移失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 22:32:10