我正在尝试在测试中使用reverse()。我尝试了this answer!但不起作用。
我仍然遇到错误
django.urls.exceptions.NoReverseMatch: Reverse for 'patients-list' with no arguments not found
。
router = DefaultRouter()
router.register(r'patients', views.PatientSet, base_name='patients')
urlpatterns = [
url(r'^', include(router.urls)),
]
这里是ModelViewSet
class PatientSet(viewsets.ModelViewSet):
queryset = Patient.objects.all()
serializer_class = PatientSerializer
permission_classes = [IsDoctorUser]
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ['is_active']
我在测试url = reverse('patients-list')
中使用这种方式
答案 0 :(得分:2)
首先,不推荐使用base_name
路由器的kwarg,而推荐使用DRF 3.11中的basename
kwarg,但这不是造成问题的原因。使用您提供的代码示例,我实际上也看不到任何问题。
我建议尝试安装django-extensions软件包。安装并配置django-extensions后,可以使用python manage.py show_urls
命令输出所有路由的列表。
python manage.py show_urls
/api/accounts/users/ accounts.views.UserViewSet account:user-list
/api/accounts/users/<uuid>/ accounts.views.UserViewSet account:user-detail
每行包含URL /api/accounts/users/<uuid>/
,视图的路径accounts.views.UserViewSet
和路由account:user-detail
的名称(这是您想要的反向名称) 。希望以此为您的路线找到正确的名称。 URL部分还指示该路由所需的任何参数。