python - 如何在 django rest 框架中反转 ViewSet 自定义操作的 URL

标签 python django url django-rest-framework

我已经为 ViewSet 定义了自定义操作

from rest_framework import viewsets

class UserViewSet(viewsets.ModelViewSet):
    @action(methods=['get'], detail=False, permission_classes=[permissions.AllowAny]) 
    def gender(self, request):
        ....

并且viewset以常规方式注册到url

from django.conf.urls import url, include                                          

from rest_framework import routers                                                 
from api import views                                                              


router = routers.DefaultRouter()                                                   
router.register(r'users', views.UserViewSet, base_name='myuser')                   

urlpatterns = [                                                                    
    url(r'^', include(router.urls)),                                               
]   

URL /api/users/gender/ 有效。但我不知道如何在单元测试中使用 reverse 获取它。 (我当然可以硬编码这个 URL,但是从代码中获取它会很好)

根据django documentation ,下面的代码应该可以工作

reverse('admin:app_list', kwargs={'app_label': 'auth'})
# '/admin/auth/'

但是我尝试了以下方法,但它们不起作用

reverse('myuser-list', kwargs={'app_label':'gender'})
# errors out
reverse('myuser-list', args=('gender',))
# '/api/users.gender'

django-restframework documentation ,有一个名为 reverse_action 的函数。然而,我的尝试没有奏效

from api.views import UserViewSet
a = UserViewSet()
a.reverse_action('gender') # error out
from django.http import HttpRequest
req = HttpRequest()
req.method = 'GET'
a.reverse_action('gender', request=req)  # still error out

反转该操作的 URL 的正确方法是什么?

最佳答案

您可以使用 reverse 只需添加到 View 集的基本名称操作:

reverse('myuser-gender') 

参见 related part文档。

关于python - 如何在 django rest 框架中反转 ViewSet 自定义操作的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51317534/

相关文章:

django - 在子管理中显示父字段(list_display)

python - Django HttpResponseRedirect,它返回 None 相反

asp.net - 使用冒号(:) in a url with ASP. NET/IIS

javascript - 如何返回上一页,但不计算js中的url变量

python - 是否可以向 Django 表单添加单行?

python - Keras-vis 给出以下错误 : AttributeError: Multiple inbound nodes

python - 是否可以将交互式 python 窗口链接到正在运行的 jupyter notebook 内核?

python - 手动添加行到 StreamingHttpResponse (Django)

python - 在 django 中使用命名空间作为 anchor 标记

python - CSV文件数据组织(结构化数据)