我已经为视图集定义了自定义操作

from rest_framework import viewsets

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

并且以常规方式将视图集注册到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/'

但我try 了以下方法,但都不管用

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

django-restframework documentation中,有一个名为reverse_action的函数.然而,我的try 没有奏效

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仅添加到视图集的基本名称操作:

reverse('myuser-gender') 

参见related part篇文档.

Django相关问答推荐

我找不到为什么我的DRF登录测试没有按预期工作

如何显示;Django认证系统;在模板中?

通过get_form_kwargs将请求传递给Django表单未能使表单访问self.request.user.

Django授权判断具有通配符模式的URL

获取结果集中返回的元素数的 django 模板标签是什么?

Django:使用 Django ORM 实现 JOIN?

djangorestframework:过滤相关字段

Django ModelForm 没有指定模型类

Django - 在模板中显示当前日期和时间

django.request 记录器没有传播到根目录?

如何获取 Django 模型来自的应用程序?

导入错误无法在windows环境下导入名称execute_manager

如何在 Django 和 django-jsonfield 中将 JSONField 的默认值设置为空列表?

Django 发送邮箱

登录后django重定向不起作用next不发布?

如何在该元素中的所有应用程序之间共享元素范围的模板标签

显式 cursor.close() 的必要性

找不到 msguniq.确保您安装了 GNU gettext 工具 0.15 或更新版本. (Django 1.8 和 OSX ElCapitan)

django 如何知道已经运行了哪些迁移?

Django:如何从模板中识别调用视图?