2017-05-26 47 views
0

我有自定义过滤器,以我的视图集:如何从多个领域进行搜索?

class OrderFilter(django_filters.rest_framework.FilterSet): 
    username = django_filters.CharFilter(name='user__username', lookup_expr='icontains') 
    client_name = django_filters.CharFilter(name='user__first_name', lookup_expr='icontains') 

    class Meta: 
     model = Order 
     exclude = ['pk'] 

和它的作品时,我送这样的查询:

http://localhost:8000/orders/?username=testuser 

http://localhost:8000/orders/?client_name=john 

,但我只希望创建一个查询在usernamefirst_namelast_name中搜索包含搜索字符串的数据。怎么做?

回答

2

对于无法用单个过滤器表示的复杂行为,一般都会使用method参数指向过滤器类(docs)。

一种可能实现:

from django_filters import rest_framework as filters 
from django.db.models import Q 


class OrderFilter(filters.FilterSet): 
    search = filters.CharFilter(method='search_filter') 

    def search_filter(self, queryset, name, value): 
     return queryset.filter(Q(username__icontains=value) 
           | Q(first_name__icontains=value) 
           | Q(last_name__icontains=value))