在通用RESTful视图中获取url pk?

时间:2013-06-07 13:22:18

标签: django rest generics

我正在尝试像这样管理我的REST API:

的http:// XXX /用户/用户ID [0-9] + /项目/专案编号[0-9] + /任务/ taskid的[0-9] + /

所以我可以在我的网站上轻松访问JSON。但事实是,我使用REST框架通用视图定义了我的视图类。例如,这是我的UserDetail视图:

class UserDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

但当然我不想要显示所有用户,我只希望显示具有ID用户ID的用户。我真的不知道怎么做,我试过了

queryset = User.objects.filter(id=userid)

但当然没有定义用户ID ...请帮忙吗?

编辑:只是为了澄清,这是导致这种观点的网址:

url(r'^users/(?P<pku>[0-9]+)/$', views.UserDetail.as_view(
                   ), name='user-detail'),

2 个答案:

答案 0 :(得分:1)

首先,如果您想使用基于类的视图,您应该阅读更多有关它们的信息。它们在Django's docs上得到了彻底的解释,您可以在REST framework docs上了解您正在使用的框架的特定泛型。我并不是说你没有读过那些,只是你似乎错过了那里解释的一些基本概念。

现在,对于手头的问题,如果查看doc's of the generic view you're extending,您可以看到它代表单个实例的端点,这意味着它不会对所有模型的实例(正如您所假设的那样)。

此外,您可以看到此视图是基于一系列其他类构建的,更重要的一个是GenericAPIView。在那里你可以看到两件事:

  • 此上下文中的queryset类字段用于过滤您可以操作的可用实例,而不是获取您网址上描述的特定实例。
  • lookup_field是定义的字段,您的模型中的哪个属性将用于获取实际实例。您应该将此字段定义到您要在网址上使用的任何字段以标识您的对象(通常是pk)。同样重要的是要注意,url应该包含与此值对应的关键字参数。

在内部,视图将负责调用get_object方法,该方法使用lookup_field值来查找特定模型,然后将该对象提供给序列化程序并将结果返回给客户端。

免责声明:我从未使用过Django REST框架,我通过阅读相关文档并根据我的经验将这个答案放在了一边。

答案 1 :(得分:0)

我想你需要这个: Resolve function (django 1.4)

然后在您的视图类方法中,您可以执行以下操作:

temp1, args, kwargs = resolve(self.request.path)
相关问题