我有一个
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 的文档,这是预期的,但这显然不是我对清理的期望。知道如何覆盖此清理以便我可以保留作为查询参数传递的所有值吗?
您的过滤方式错误,事实并非如此:
?sort_by=name&sort_by=location
但是:
?sort_by=name,location
在这种情况下,
QueryDict
因此是:
QueryDict({"sort_by": ["name,location"]})
不是:
QueryDict({"sort_by": ["name", "location"]}
对我来说,答案是从 django-filters
value_from_datadict
覆盖 BaseCSVWidget
。
然后我就可以使用 QueryDict 中的
lists()
方法来代替 get()
。