小编apo*_*629的帖子

django rest 框架搜索过滤所有字段

我有一个基本模型视图集,我可以处理订单、分页和搜索功能。当我有适当的过滤器后端时,我可以设置 ordering_fields、search_fields 但我的问题是:就像我可以设置一样,ordering_fields = '__all__' 是否可以为所有人设置 search_fields?

我一直在寻找深入的内部过滤机制并来到这里:

def filter_queryset(self, request, queryset, view):
    search_fields = getattr(view, 'search_fields', None)

    if not search_fields:
        return queryset

    orm_lookups = [self.construct_search(six.text_type(search_field))
                   for search_field in search_fields]

    for search_term in self.get_search_terms(request):
        or_queries = [models.Q(**{orm_lookup: search_term})
                      for orm_lookup in orm_lookups]
        queryset = queryset.filter(reduce(operator.or_, or_queries))

    return queryset
Run Code Online (Sandbox Code Playgroud)

如果设置了,则 drf 在生成 search_fields 时失败search_fields='__all__' 有没有其他方法可以通过所有功能提供搜索?

django rest search filter django-rest-framework

3
推荐指数
1
解决办法
1956
查看次数

标签 统计

django ×1

django-rest-framework ×1

filter ×1

rest ×1

search ×1