gpt4 book ai didi

python - 在 Django REST 中,有没有一种方法可以在 RetrieveAPIView 中设置键,而不是在 ListAPIView 中进行过滤?

转载 作者:太空宇宙 更新时间:2023-11-03 16:20:14 24 4
gpt4 key购买 nike

在 Django REST 中,我有一个 ListAPIView,我用它来根据请求用户获取记录(通常只是一条记录):

class UserPageView(ListAPIView):
serializer_class = UserPageSerializer
def get_queryset(self):
return User.objects.filter(pk=self.request.user.pk)

因为我只得到一条记录,所以我想知道是否有一种方法可以使用 RetrieveAPIView 来代替(以达到相同的结果)。通过某种方式包装 View 并使用设置为请求用户的 pk 的 kwargs 来调用它。或者覆盖 RetrieveAPIView 中的主键,将其设置为请求用户的 pk?

更新

可以通过重写 get_object 来使用不带 URL 参数的 RetrieveAPIView:

class UserPageView(RetrieveAPIView):
serializer_class = UserPageSerializer
def get_object(self):
return get_object_or_404(User, pk=self.request.user.pk)

最佳答案

ListAPIViewDetailAPIViewGenericAPIViews ,具有 list-detail-create-update-delete mixed-in 的标准实现跟他们。我认为对于你的情况,编写一个自定义的 APIView 比尝试修改这些东西更简单 - 它们是很难破解的坚果,并且可能需要几周的时间来理解 DRF 的调用图才能调整它们。

class UserPageView(APIView):
def get(self, request, format=None):
user = User.objects.get(pk=self.request.user.pk)
serializer = UserPageSerializer(data=request.data, context={"user": user})
return Response(serializer.data)

另请参阅:Pass extra arguments to Serializer Class in Django Rest Framework .

关于python - 在 Django REST 中,有没有一种方法可以在 RetrieveAPIView 中设置键,而不是在 ListAPIView 中进行过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38555057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com