我正在尝试使用 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 过滤器集定义我自己的非模型字段名称的自定义查询?
答案 0 :(得分:1)
您可以定义一个任意函数来进一步过滤查询集。例如:
class MyFilterSet(FilterSet):
custom_field = CharFilter(method='filter_not_empty')
def filter_custom_field(queryset, name, value):
return queryset.filter(… some filtering …)
class Meta:
model = Model
fields = ['custom_field']
因此,我们为 CharFilter
定义了一个 custom_field
,从而解析字符串。使用`method='filter_not_empty',我们指的是将被调用的方法。
此方法使用需要过滤的 queryset
调用,name
是过滤器字段的名称(这里是 custom_field
,但您可以,如果需要,对多个过滤器集字段使用相同的方法)和值。
该方法应返回一个用 QuerySet
过滤的 … some filtering …