Django Filterset 数据未按预期清理

问题描述 投票:0回答:2

我有一个

FilterSet
定义如下:

from django_filters import rest_framework

class SomeFilter(filters.FilterSet):
    id = filters.BaseInFilter()
    sort_by = rest_framework.OrderingFilter(fields=["name", "creation_date", "location"])

我使用DRF来定义API视图。在视图中,我使用

filterset = self.get_filterset(queryset)
访问过滤器数据。我注意到了什么:

  • filterset.form.data
    给了我一个 QueryDict({"sort_by": ["name", "location"]} (例如)
  • 如果我运行
    filterset.form.cleaned_data.get("sort_by")
    ,我只会得到
    "location"

如果我查看 QueryDict 的文档,这是预期的,但这显然不是我对清理的期望。知道如何覆盖此清理以便我可以保留作为查询参数传递的所有值吗?

django django-rest-framework django-filter
2个回答
0
投票

您的过滤方式错误,事实并非如此:

?sort_by=name&sort_by=location

但是:

?sort_by=name,location

在这种情况下,

QueryDict
因此是:

QueryDict({"sort_by": ["name,location"]})

不是:

QueryDict({"sort_by": ["name", "location"]}

0
投票

对我来说,答案是从 django-filters

value_from_datadict
覆盖
BaseCSVWidget

然后我就可以使用 QueryDict 中的

lists()
方法来代替
get()

© www.soinside.com 2019 - 2024. All rights reserved.