如何反转使用 DefaultRouter() 的 url?

How to reverse a url that is using DefaultRouter()?

我正在尝试在我的测试中使用 reverse() 。我试过了!但它不起作用。
我仍然收到错误
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')

首先,路由器的 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.UserViewSetname(这就是你想要的反向) 路线 account:user-detail。有了这个,我希望您能够为您的路线找到正确的名称。 URL 部分还指示该路由所需的任何参数。