在路径 Django 的 URL 参数中指定两个参数

Specify two arguments in URL parameters for path Django

我目前有一个接受 GET 请求的端点,用于检索日期范围内的用户(没有真正需要解释 'why')。具体端点如下所示:GET /users/?fromdate={yyyy-mm-dd}&todate={yyyy-mm-dd}

例如,我可以有这样的请求:GET /users/?fromdate=2017-01-01&todate=2017-04-01

urls.pyviews.py 上没有过多的细节,我已经指定了路由器寄存器和路径来接受对这个端点的请求(工作正常):

urls.py:

router = routers.DefaultRouter()
router.register(r"user", views.UserViewSet, basename='user')

urlpatterns = [
    path('user/', views.UserViewSet.as_view({'get': 'user'}), name='user')
]

我现在正在尝试 运行 单元测试只是为了向此端点发送请求

我的部分 test_user.py class 看起来像这样:

def test_user_list(self):
    response = self.client.get(reverse('user', kwargs={'fromdate': '2017-01-01', 'todate': '2017-04-01'})), format='json')
    self.assertEqual(response.status_code, 200)

但是,当我运行进行单元测试时,我得到一个错误:

Reverse for 'user' with keyword arguments '{'fromdate': '2017-01-01', 'todate': '2017-04-01'}' not found. 1 pattern(s) tried: ['/user/$']

我认为错误是由于我的路径(虽然它通过像 Postman 这样的 REST 客户端手动工作)没有指定期望的参数 path('user/', views.UserViewSet.as_view({'get': 'user'}), name='user')

那么如何指定参数来满足上面的 'fromdate' 和 'todate' 呢?我查看了 documentation,但除了诸如 /articles/2005/03/ 之类的网址,我找不到任何其他内容。

kwargs,当传递给 reverse() 时,变成 URL args,例如user/arg1/arg2/

如果你想传递 URL 变量,kwargs 应该传递给 .get() 而不是,作为数据:

response = self.client.get(reverse('user'), {'fromdate': '2017-01-01', 'todate': '2017-04-01'})