DRF 中的几个查询参数 URL

Several query params URL in DRF

无法构建包含 3 个参数的 URL。 未在网络中找到任何合适的现有示例。

routers.py

router = routers.SimpleRouter()
router.register(r'reservation(?P<param1>)', ReservationViewSet, 'reservation')

这适用于一个参数。 添加两个参数来解析 URL 的正确语法是什么:

http://127.0.0.1:8000/api/general/reservation?enterprise=4&start=01-01-2015&end=01-31-2016

?

谢谢!

简而言之,我建议您选择一种方式,不要将 GET 参数与 URL 结构混合使用。

获取参数

如果您使用 URI 这样的 /api/general/reservation?enterprise=4&start=01-01-2015&end=01-31-2016,您的 URI 可以写成这种形式:path[?query],路径为 /api/general/reservation,查询为?enterprise=4&start=01-01-2015&end=01-31-2016,这是可选的,在路径之后。

要获取这些参数,您需要从请求中读取它们的值,例如enterprise = request.GET['enterprise']

因此,如果您想保留该结构,在您的 ViewSet 中,只需阅读您的视图方法的那些参数

def do_something(request):
    # read the params first
    enterprise = request.GET['enterprise']
    ...
    # do something with those values

要使用此方案并匹配您的路径,只需像这样路由

router.register(r'reservation', ReservationViewSet, 'reservation')

r'reservation(?P<param>)' 不需要,查询不是路径的一部分,所以不要包含它)

参数来自 URL 匹配

否则,如果您尝试直接从 URL 中解析这些内容,例如使用 URL 正则表达式,那么你需要一个更像这样的形式 /api/general/reservation/4/01-01-2015/01-31-2016 来匹配这种结构的东西 reservation/(?P<enterprise>)/(?P<start>)/(?P<end>)

然后你的视图方法看起来像

def do_something(request, enterprise, start, end):
    # do something with those values