Nip*_*ips 2 django-filter django-rest-framework
我的视图集有自定义过滤器:
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']
Run Code Online (Sandbox Code Playgroud)
当我发送这样的查询时它会起作用:
http://localhost:8000/orders/?username=testuser
Run Code Online (Sandbox Code Playgroud)
或者
http://localhost:8000/orders/?client_name=john
Run Code Online (Sandbox Code Playgroud)
但我只想创建一个查询来搜索包含username,first_name和中的搜索字符串的数据last_name。怎么做?
对于无法由单个过滤器表达的复杂行为的一般包罗万象是使用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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1160 次 |
| 最近记录: |