【问题标题】:Django query params to arrayDjango查询参数到数组
【发布时间】:2025-12-25 01:35:11
【问题描述】:

我正在尝试从数组中获取结果,如下所述: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]

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

我什至尝试按照此处how to get multiple results using same query params django 的说明使用getlist,这确实产生了预期的结果

def get_queryset(self):
        years = self.request.query_params.get('years')
        return self.queryset.filter(year__in=years)

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

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

def get_queryset(self):
        return self.queryset.filter(year__in=['2018', '2019'])

【问题讨论】:

    标签: django python-3.x django-rest-framework


    【解决方案1】:

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

    - 编辑-

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

    years = self.request.query_params.getlist('years', '')
    

    将此转换为列表。

    –@indavinci

    【讨论】:

    • 上述答案不起作用需要添加更多年,我得到了解决方案127.0.0.1:8000/blogs?years=2018&years=2019 和 years = self.request.query_params.getlist('years', '') 将其转换为列表。
    • 完美!将您的解决方案添加到答案中;)
    【解决方案2】:

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

    网址:

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

    您的看法:

    def get_queryset(self):
        years = self.request.query_params.get('years').split(',')
        return self.queryset.filter(year__in=years)
    

    【讨论】:

    • 就是这样
    【解决方案3】:

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

    request.GET.getlist('years', '')
    

    【讨论】: