使用 Django 过滤器自定义过滤器
Custom filter with Django Filters
我正在尝试使用 django_filters
:
编写自己的自定义过滤器 class,如下所示
from django_filters import rest_framework as filters
class FooFilter(filters.FilterSet):
class Meta:
model = Model
fields = ['custom_field',]
class Foo():
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = FooFilter
在模型中,由于我没有字段custom_field
,它会给出错误:TypeError: 'Meta.fields' must not contain non-model field names: custom_field
问题:是否可以使用 Django Filterset 定义我自己的非模型字段名称的自定义查询?
您可以定义一个任意函数来进一步过滤查询集。例如:
class MyFilterSet(FilterSet):
custom_field = CharFilter(<strong>method='filter_not_empty'</strong>)
def <strong>filter_custom_field</strong>(queryset, name, value):
return queryset.filter(… some filtering …)
class Meta:
model = Model
fields = ['custom_field']
因此,我们在这里为 custom_field
定义了一个 CharFilter
,因此将解析一个字符串。使用`method='filter_not_empty',我们指的是将要调用的方法。
这个方法调用时带了一个需要过滤的queryset
,name
是过滤字段的名字(这里是custom_field
,但是你可以,如果你想要,对 多个 过滤器集字段使用相同的方法)和值。
该方法应该 return 一个用 … some filtering …
过滤掉的 QuerySet
我正在尝试使用 django_filters
:
from django_filters import rest_framework as filters
class FooFilter(filters.FilterSet):
class Meta:
model = Model
fields = ['custom_field',]
class Foo():
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = FooFilter
在模型中,由于我没有字段custom_field
,它会给出错误:TypeError: 'Meta.fields' must not contain non-model field names: custom_field
问题:是否可以使用 Django Filterset 定义我自己的非模型字段名称的自定义查询?
您可以定义一个任意函数来进一步过滤查询集。例如:
class MyFilterSet(FilterSet):
custom_field = CharFilter(<strong>method='filter_not_empty'</strong>)
def <strong>filter_custom_field</strong>(queryset, name, value):
return queryset.filter(… some filtering …)
class Meta:
model = Model
fields = ['custom_field']
因此,我们在这里为 custom_field
定义了一个 CharFilter
,因此将解析一个字符串。使用`method='filter_not_empty',我们指的是将要调用的方法。
这个方法调用时带了一个需要过滤的queryset
,name
是过滤字段的名字(这里是custom_field
,但是你可以,如果你想要,对 多个 过滤器集字段使用相同的方法)和值。
该方法应该 return 一个用 … some filtering …
QuerySet