Django Rest Framework:具有相同名称的@detail_route和@list_route

Seb*_*ner 2 python django django-rest-framework

我有一个DRF ViewSet,并想提供详细信息并列出具有相同名称的路由:

class MyViewSet(ViewSet):
    # ...

    @detail_route(['post'])
    def do_stuff(self, request, *args, **kwargs):
        pass

    @list_route(['post'])
    def do_stuff(self, request, *args, **kwargs):
        pass
Run Code Online (Sandbox Code Playgroud)

这显然行不通,因为list_route会覆盖detail_route

有没有一种简单的方法可以提供这两种路由,而无需人工弄乱网址

小智 7

我不确定这是否是您要查找的内容,可以为两个设置相同的URL路径名称:

class MyViewSet(ViewSet):
    # ...

    @detail_route(['post'], url_path='do_stuff')
    def do_stuff_detail(self, request, *args, **kwargs):
        pass

    @list_route(['post'], url_path='do_stuff')
    def do_stuff_list(self, request, *args, **kwargs):
        pass
Run Code Online (Sandbox Code Playgroud)

在第一个中,URL将是../"id"/do_stuff,在第二个中,URL将是../do_stuff