0

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

http://xxx/users/userid[0-9]+/projects/projectid[0-9]+/tasks/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:

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

2 回答 2

1

首先,如果你想使用基于类的视图,你应该阅读更多关于它们的内容。它们在Django 的文档中得到了彻底的解释,您也可以在REST 框架文档中阅读您正在使用的框架的特定泛型。我并不是说您没有阅读过这些内容,只是您似乎遗漏了那里解释的一些基本概念。

现在,对于手头的问题,如果您查看您正在扩展的通用视图的文档,您可以看到它代表单个实例的端点,这意味着它不会作用于您模型的所有实例(如你似乎假设)。

此外,您可以看到此视图是建立在一系列其他类之上的,其中更关键的是GenericAPIView. 在那里你可以看到两件事:

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

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

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

于 2013-06-17T01:16:26.290 回答
0

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

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

temp1, args, kwargs = resolve(self.request.path)
于 2013-06-16T23:07:28.643 回答