JT.*_*JT. 7 python django rest django-rest-framework
我是django和django-rest-framework的新手,但我试图将列表传递给url参数,然后通过它们过滤我的模型.
让我们说客户端应用程序发送的请求看起来像这样......
url: "api.com/?something=string,string2,string3&?subthings=sub,sub2,sub3&?year=2014,2015,2016/"
Run Code Online (Sandbox Code Playgroud)
我想用它们的值传递那些参数"东西","子东西"和"年".
网址看起来像这样?
注意:Trick是每个参数不会总是长度为3的数组.
有人能指出我正确的方向,我的url正则表达式应该如何处理列表,并在我的视图中检索查询列表.
谢谢!
通过上面的文档链接显示我是如何做到这一点的.注意:我使用管道作为我的网址分隔符而不是逗号 - >'|'.
在我的 urls.py
url(r'^$', SomethingAPIView.as_view(), name='something'),
Run Code Online (Sandbox Code Playgroud)
在我的 views.py
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
Run Code Online (Sandbox Code Playgroud)
如果它们无效,我确实需要检查空结果.但是,对于希望在查询参数中传递多个值的人来说,这是起点.
这里有一个有效的网址/?something=1|2|3&subthing=4|5|6&year=2015|2016.
| 归档时间: |
|
| 查看次数: |
9268 次 |
| 最近记录: |