使用 Django Filters 自定义过滤器

ash*_*ash 2 python django django-filters django-rest-framework

我正在尝试使用以下方法编写自己的自定义过滤器类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
Run Code Online (Sandbox Code Playgroud)

在模型中,由于我没有该字段custom_field,因此会出现错误:TypeError: 'Meta.fields' must not contain non-model field names: custom_field

问题:是否可以使用 Django Filterset 定义我自己的自定义查询(非模型字段名称)?

Wil*_*sem 6

您可以定义任意函数来进一步过滤查询集。例如:

\n
class MyFilterSet(FilterSet):\n    custom_field = CharFilter(method='filter_not_empty')\n\n    def filter_custom_field(queryset, name, value):\n        return queryset.filter(… some filtering …)\n\n    class Meta:\n        model = Model\n        fields = ['custom_field']
Run Code Online (Sandbox Code Playgroud)\n

因此,在这里我们定义了一个CharFilterforcustom_field来解析一个字符串。通过 `method='filter_not_empty',我们引用将被调用的方法。

\n

调用此方法时需要使用queryset需要过滤的 ,name是过滤器字段的名称(这里是custom_field,但如果您愿意,您可以对多个过滤器集字段使用相同的方法)和值。

\n

该方法应该返回一个QuerySet经过过滤的\xe2\x80\xa6 some filtering \xe2\x80\xa6

\n