Django Model.objects.get -对象不可迭代

3mpgtkmj  于 2023-05-08  发布在  Go
关注(0)|答案(2)|浏览(187)

我正在用用户模型构建一个Django应用程序。型号:models.py

class User(AbstractUser):
    phone = models.CharField(max_length=20, blank=False)
    is_verified = models.BooleanField(default=False)
    address = models.CharField(max_length=200)
    city = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
    is_verified = models.BooleanField(default=False)

serializers.py:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'first_name', 'last_name')

views.py

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

    def get_queryset(self):
        return User.objects.get(id=self.request.user.id)

当进入url /profile时,我得到一个错误:
“User”对象不可迭代
我验证了数据库中有一个ID = 1的用户,并且self.request.user.id是int(1)
欣赏任何见解
我尝试从对象用户获取用户配置文件数据。我希望得到一个用户序列化的结果,即{id:1,first_name=“X”,last_name=“Y”}我实际上得到了一个带有“User”对象的响应,该对象不可迭代

vfh0ocws

vfh0ocws1#

ModelViewSet不适合这个任务,因为一个简单的GET将返回一个 list,也许是一个只有一个元素的列表,但实际上是一个列表。如果在URL中添加/pk``后缀,则只能检索单个元素。
您可以使用RetrieveAPIView

from rest_framework.generics import RetrieveAPIView

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

    def get_object(self):
        return self.request.user
bf1o4zei

bf1o4zei2#

您应该更改代码以返回一个可以迭代的查询集来纠正这个错误。要实现这一点,您可以将返回的对象封装在列表中,如下所示:

def get_queryset(self):
   return User.objects.filter(id=self.request.user.id)

这将生成一个可以迭代的查询集,它包含一个具有给定id的User对象。

相关问题