Django查询参数到数组

ind*_*nci 1 django python-3.x django-rest-framework

我正在尝试从数组中获取结果,如下所述:https : //docs.djangoproject.com/en/dev/ref/models/querysets/#in

http://127.0.0.1:8000/blogs?years=['2018', '2019']
http://127.0.0.1:8000/blogs?years=[2018, 2019]

Run Code Online (Sandbox Code Playgroud)

事实证明 ['2018', '2019'] 不是我得到的年份,即使它们在视觉上看起来完全一样。

我什至尝试使用 getlist 作为解释here how to get multiple results using same query params django这确实产生了所需的结果

def get_queryset(self):
        years = self.request.query_params.get('years')
        return self.queryset.filter(year__in=years)
Run Code Online (Sandbox Code Playgroud)

关于我在这里做错了什么的任何线索?

我尝试了所有选项它都不起作用,而我在下面的语句中输入它工作得很好

def get_queryset(self):
        return self.queryset.filter(year__in=['2018', '2019'])
Run Code Online (Sandbox Code Playgroud)

小智 7

我不相信这种方式会奏效。当您在查询字符串中传递值时,我猜 Django 将作为字符串接收。

- 编辑 -

上面的答案行不通,需要多加几年,我得到了解决方案,127.0.0.1:8000/blogs?years=2018&years=2019并且

years = self.request.query_params.getlist('years', '')
Run Code Online (Sandbox Code Playgroud)

将其转换为列表。

– @indavinci

  • 上面的答案不起作用,需要添加更多年份,我得到了解决方案http://127.0.0.1:8000/blogs?years=2018&years=2019 和years = self.request.query_params.getlist('years', '' ) 将其转换为列表。 (2认同)

小智 6

如果您有基于函数的视图,这应该可以工作:

request.GET.getlist('years', '')
Run Code Online (Sandbox Code Playgroud)


小智 6

我认为解决这个问题的更好、更干净的方法是在查询参数中将字符串作为逗号分隔值传递,然后在 Django 视图中将它们分开。

网址:

http://127.0.0.1:8000/blogs?years=2018,2019
Run Code Online (Sandbox Code Playgroud)

您的看法:

def get_queryset(self):
    years = self.request.query_params.get('years').split(',')
    return self.queryset.filter(year__in=years)
Run Code Online (Sandbox Code Playgroud)