emi*_*ir0 7 django django-filter
假设我想过滤一个内置的 djangoUser模型,但我只想在 1 个过滤器字段中这样做,而不是每个字段一个过滤器。也就是说,我想直接在过滤器字段中模拟 django 管理员search_fields(django admin search_fields docs)的行为。
因此,例如,不是有一个过滤器field_name='first_name',然后是另一个过滤器field_name'last_name'等等,我想做类似的事情field_name=['first_name', 'last_name', 'email', 'username'],在那里lookup_expr='icontains'可以使用相同的东西。然后查询是一个简单的 OR 查找。这是内置的吗?我在django-filter docs 中找不到它。
或者我必须为此制作自定义过滤器。这似乎是一个非常常见的用例。
我使用 Q 对象通过自定义过滤器完成了此操作。
import django_filters
from django.db.models import Q
class UserFilter(django_filters.FilterSet):
multi_name_fields = django_filters.CharFilter(method='filter_by_all_name_fields')
class Meta:
model = User
fields = []
def filter_by_all_name_fields(self, queryset, name, value):
return queryset.filter(
Q(first_name__icontains=value) | Q(last_name__icontains=value) | Q(username__icontains=value) | Q(email__icontains=value)
)
Run Code Online (Sandbox Code Playgroud)
然后确保针对新的过滤器字段 ( multi_name_fields ) 进行过滤,这应该返回您要查找的内容。
| 归档时间: |
|
| 查看次数: |
3122 次 |
| 最近记录: |