我已经创建了模型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)
但由于某些原因,我收到所有用户个人资料数据而不是登录用户数据,请告诉我我在哪里做错了。
答案 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