django-filter在无效查询参数上返回空查询集

时间:2014-12-01 03:01:40

标签: django django-filter

如果给出了无效的查询参数,是否有办法让FilterSet返回空的查询集?例如,在people/?name=joe&asdf=asdf中,name是模型上的有效列,但asdf无关紧要。目前django-filter返回所有对象。

我可以手动检查所有参数是否有效,但我想知道是否有更好的方法。

2 个答案:

答案 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