路由器`detail_route`中是否需要查找字段?

时间:2017-05-02 19:26:38

标签: django-rest-framework django-rest-viewsets

在此处查看:http://www.django-rest-framework.org/api-guide/routers/#extra-link-and-actions该示例包含pk=None

@detail_route(methods=['post'], permission_classes=[IsAdminOrIsSelf])
def set_password(self, request, pk=None):

并说将生成以下网址格式:^users/{pk}/set_password/$

在此处:http://www.django-rest-framework.org/api-guide/routers/#simplerouter它还说lookup字段位于网址:{prefix}/{lookup}/{methodname}/

DRF是否将lookup值传递给detail_route方法?根据文档,它看起来像它,但在这里:http://www.django-rest-framework.org/api-guide/routers/#example

如果向下滚动到:

@detail_route()
    def group_names(self, request):
        """
        Returns a list of all the group names that the given
        user belongs to.
        """
        user = self.get_object()
        groups = user.groups.all()
        return Response([group.name for group in groups])

不要求查找值作为group_names函数的参数。我的问题是:

1)pk中是否需要detail_route /一个查找字段参数?

2)如果没有,那么self.get_object()如何知道要获得哪个对象?

3)另外,如果没有,那么不应该使用@list_route代替,因为甚至没有使用查找?

修改:在此处:http://www.django-rest-framework.org/api-guide/viewsets/#marking-extra-actions-for-routing它还说The @detail_route decorator contains pk in its URL pattern and is intended for methods which require a single instance.

1 个答案:

答案 0 :(得分:1)

  

1)detail_route中是否需要pk / a查找字段参数?

是。感谢您发现它,它已在存储库中修复,并将在下次生成文档时更新。

  

2)如果没有,那么self.get_object()如何知道要获取哪个对象?

视图的参数/关键字参数存储在get_object使用的view.argsview.kwargs中。

  

3)另外,如果没有,那么不应该使用@list_route,因为甚至没有使用查找?

它已经通过self.get_object使用,它返回关联的用户,因此它是一个detail_route。