【发布时间】:2016-11-28 01:06:39
【问题描述】:
在 Django REST 中,我有一个 ListAPIView,我用它来根据请求用户获取记录(通常只是一个):
class UserPageView(ListAPIView):
serializer_class = UserPageSerializer
def get_queryset(self):
return User.objects.filter(pk=self.request.user.pk)
因为我只得到一条记录,所以我想知道是否有办法使用 RetrieveAPIView 代替(以实现相同的结果)。通过以某种方式包装视图并使用设置为请求用户 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)
【问题讨论】:
-
对不起,你想达到什么目的?我不明白,为什么要用 RetrieveAPIVeiw 替换 ListAPIView - list 用于集合,retrieve 用于单个集合项。 RetrieveAPIView 在过滤器和序列化器方面的工作方式完全相同。
-
我正在尝试检索一条记录,即与请求用户对应的一条记录。我可以使用 ListAPIView 实现这一点,但我必须忽略“列表”,所以它很乱。我想使用 RetrieveAPIView 因为它只返回一条记录。但是,问题在于您必须通过 URL 传递 pk。
-
这就是为什么我想知道是否可以包装视图,在包装器中调用视图并将 pk 设置为请求用户的 pk。
-
啊,现在我明白了。我认为,创建一个自定义 APIView 可能比乱用现有的 GenericViews 的具体细节更好。
标签: python django django-rest-framework