class UserProfileView(generics.ListCreateAPIView):
permission_classes = (
permissions.IsAuthenticated,
)
serializer_class = UserProfileSerializer
def list(self,request):
queryset = UserProfile.objects.filter(user=request.user.id)
serializer = UserProfileSerializer(queryset, many=True)
return Response(serializer.data)
我已经像这样拉出来了
[
{
"id": 1,
"firstname": "exp",
"lastname": "exp"
}
]
我想要这样,我怎么能这样做而且我不知道为什么它会像对象一样返回列表,我该如何解决这个问题
{
"id": 1,
"firstname": "exp",
"lastname": "exp",
}
答案 0 :(得分:3)
ListCreateAPIView
旨在返回对象列表。
像这样的表示
{
"id": 1,
"firstname": "exp",
"lastname": "exp",
}
表示您想要一个对象,而不是对象列表,这意味着您需要使用RetrieveAPIView
没有RetrieveCreateAPIView
,但您可以使用RetrieveModelMixin
喜欢这个
from rest_framework import mixins, generics
class UserProfileView(mixins.RetrieveModelMixin, generics.CreateAPIView):
permission_classes = (
permissions.IsAuthenticated,
)
serializer_class = UserProfileSerializer
# Custom get_object method which is gets from request
# instead of queryset
def get_object(self, queryset=None):
return UserProfile.objects.get(user=self.request.user)
# You can look this up in RetrieveAPIView
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
<强>更新强>
您需要重载get_object
方法,默认情况下get_object
将查看传递的url参数并尝试从提供的查询中获取对象。这样做是CRUDL用法的通用。之后,get_object
返回的值用于实例化serializer_class
。但在您的情况下,您需要返回request
中的当前用户。查看更新的答案。如果您查找retrieve
方法重新启动,则可以理解所有这些信息。对于开发人员来说,了解如何阅读源代码是必不可少的技能。