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

