2017-05-26 7 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_name、および last_nameに検索します。どうやってするの?

答えて

2

単一のフィルタでは表現できない複雑な動作の一般的なキャッチオールは、フィルタクラス(docs)に引数methodを使用することです。

可能な実装:

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)) 
関連する問題