Python django rest框架:在URL中列出参数

Python django rest框架:在URL中列出参数,python,django,rest,django-rest-framework,Python,Django,Rest,Django Rest Framework,我对django和django rest框架相当陌生,但我正在尝试将列表传递到url参数中,然后根据它们过滤我的模型 假设客户端应用程序正在发送一个如下所示的请求 url: "api.com/?something=string,string2,string3&?subthings=sub,sub2,sub3&?year=2014,2015,2016/" 我想将这些参数“事物”、“子事物”和“年份”与其值一起传递 url在什么地方看起来像这样 注意:诀窍在于,对于每个参数,它

我对django和django rest框架相当陌生,但我正在尝试将列表传递到url参数中,然后根据它们过滤我的模型

假设客户端应用程序正在发送一个如下所示的请求

  url: "api.com/?something=string,string2,string3&?subthings=sub,sub2,sub3&?year=2014,2015,2016/"
我想将这些参数“事物”、“子事物”和“年份”与其值一起传递

url在什么地方看起来像这样

注意:诀窍在于,对于每个参数,它并不总是长度为3的数组

有人能告诉我url正则表达式应该如何处理列表以及如何在视图中检索查询列表的正确方向吗

谢谢

签出此文档


由于上面的文档链接,url regex通常不会验证查询参数,以显示我是如何做到这一点的。 注意:我使用管道作为url分隔符,而不是逗号->“|”

在my
url.py中

url(r'^$', SomethingAPIView.as_view(), name='something'),
class SomethingAPIView(ListAPIView):
  # whatever serializer class

  def get_queryset(self):
    query_params = self.request.query_params
    somethings = query_params.get('something', None)
    subthings = query_params.get('subthing', None)
    years = query_params.get('year', None)

    # create an empty list for parameters to be filters by 
    somethingParams = []
    subthingsParams = []
    yearParams = []

    # create the list based on the query parameters
    if somethings is not None:
      for something in somethings.split('|'):
        countryParams.append(int(something))
    if subthings is not None:
      for subthing in subthings.split('|'):
        subthingsParams.append(int(subthing))
    if years is not None:
      for year in years.split('|'):
        yearParams.append(int(year))

    if somethings and subthings and years is not None:
      queryset_list = Model.objects.all()
      queryset_list = queryset_list.filter(something_id__in=countryParams)
      queryset_list = queryset_list.filter(subthing_id__in=subthingsParams)
      queryset_list = queryset_list.filter(year__in=yearParams)
      return queryset_list
在my
views.py中

url(r'^$', SomethingAPIView.as_view(), name='something'),
class SomethingAPIView(ListAPIView):
  # whatever serializer class

  def get_queryset(self):
    query_params = self.request.query_params
    somethings = query_params.get('something', None)
    subthings = query_params.get('subthing', None)
    years = query_params.get('year', None)

    # create an empty list for parameters to be filters by 
    somethingParams = []
    subthingsParams = []
    yearParams = []

    # create the list based on the query parameters
    if somethings is not None:
      for something in somethings.split('|'):
        countryParams.append(int(something))
    if subthings is not None:
      for subthing in subthings.split('|'):
        subthingsParams.append(int(subthing))
    if years is not None:
      for year in years.split('|'):
        yearParams.append(int(year))

    if somethings and subthings and years is not None:
      queryset_list = Model.objects.all()
      queryset_list = queryset_list.filter(something_id__in=countryParams)
      queryset_list = queryset_list.filter(subthing_id__in=subthingsParams)
      queryset_list = queryset_list.filter(year__in=yearParams)
      return queryset_list
如果结果无效,我需要检查是否有空结果。但对于希望在查询参数中传递多个值的人来说,这是一个起点


这里的有效url应该是
/?something=1 | 2 | 3&subthing=4 | 5 | 6&year=2015 | 2016

正确的方向使用管道而不是逗号是否有好处?