Django rest框架获取登录用户的用户配置文件数据

时间:2018-04-23 12:38:52

标签: django django-models django-rest-framework

我已经创建了模型UserProfile,serilzers和ModelViewSet,如下所示。从下面的模型我想获取用户配置文件详细信息,如州,城市和地址等

 class UserProfile(models.Model):
    user= models.OneToOneField(User,on_delete=models.CASCADE,related_name='userprofile');
    state= models.CharField(max_length=200)
    city= models.CharField(max_length=200)
    add1= models.CharField(max_length=200)
    add2= models.CharField(max_length=200)
    postalcode= models.IntegerField()
    country= models.CharField(max_length=200)


class UserProfileSerializer(serializers.ModelSerializer):

class Meta:
    model = UserProfile
    fields = ('state','city','country')



class UserProfileViewSet(viewsets.ModelViewSet):
    queryset=UserProfile.objects.all()
    serializer_class=UserProfileSerializer
    def get(self, request):
        userProfileObj = queryset.objects.filter(user_id=request.user.id)
        serializer = self.get_serializer(userProfileObj)
        return Response(serializer.data)

但由于某些原因,我收到所有用户个人资料数据而不是登录用户数据,请告诉我我在哪里做错了。

2 个答案:

答案 0 :(得分:2)

ModelViewSet实施方法list / retrieve而非get

只需覆盖get_queryset即可。无需自己创建序列化程序。 (此处也不需要设置queryset属性。)

答案 1 :(得分:2)

您可以通过覆盖get_queryset()方法来完成,如下所示

class UserProfileViewSet(viewsets.ModelViewSet):
    queryset = UserProfile.objects.all()
    serializer_class = UserProfileSerializer

    def get_queryset(self):
        if self.action == 'list':
            return self.queryset.filter(user=self.request.user)
        return self.queryset


这里'list'引用了api类型,即list api。这意味着,当您访问列表api

时,它将返回登录用户的个人资料