如果给出了无效的查询参数,是否有办法让FilterSet
返回空的查询集?例如,在people/?name=joe&asdf=asdf
中,name
是模型上的有效列,但asdf
无关紧要。目前django-filter返回所有对象。
我可以手动检查所有参数是否有效,但我想知道是否有更好的方法。
答案 0 :(得分:3)
假设您的模型名称为People
if parameter not in [ f.name for f in People._meta.fields ]:
return People.objects.none()
您可以检查每个参数是否匹配模型字段。如果GET
参数无效,请返回并清空模型查询集。
到期OP评论:
如果查询参数无效,则应引发FieldError
异常:
try:
qs=People.objects.filter(**request.GET)
except FieldError:
qs=People.objects.none()
答案 1 :(得分:2)
这不是django-filter
问题。
filter_obj = filter_class(self.request.GET, queryset=self.get_queryset())
您可以在get_queryset
:
def get_queryset(self):
if all(map(lambda x: any(x == f for f in self.filter_class.declared_filters), self.request.GET)):
queryset = self.model.objects.all()
else:
queryset = self.model.objects.none()
return queryset