使用 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',我们指的是将要调用的方法。

这个方法调用时带了一个需要过滤的querysetname是过滤字段的名字(这里是custom_field,但是你可以,如果你想要,对 多个 过滤器集字段使用相同的方法)和值。

该方法应该 return 一个用 … some filtering …

过滤掉的 QuerySet