小编vad*_*imb的帖子

在 django-filters 的 FilterSet 中使用全文搜索的最佳方法?

我的应用程序使用rest-frameworkdjango-filter. 我用它FilterSet来提供文章过滤列表(ModelViewSetdate

from django_filters import rest_framework as filters

class ArticleFilter(filters.FilterSet):
    start_date = filters.DateTimeFilter(field_name='pub_date', lookup_expr='gte')
    end_date = filters.DateTimeFilter(field_name='pub_date', lookup_expr='lte') 

    class Meta:
        model = Article
        fields = ['pub_date']
Run Code Online (Sandbox Code Playgroud)

我想将搜索框添加到我的应用程序中,因此我需要另一个过滤器,它将在我的模型中使用全文搜索Article。我要搜索的字段是titledescription。我决定添加search带有method这样的参数的字段:

from django_filters import rest_framework as filters
from django.contrib.postgres.search import SearchVector

class ArticleFilter(filters.FilterSet):
    start_date = filters.DateTimeFilter(field_name='pub_date', lookup_expr='gte')
    end_date = filters.DateTimeFilter(field_name='pub_date', lookup_expr='lte')
    search = filters.CharFilter(method='filter_search')

    def filter_search(self, queryset, name, value):
        return queryset.annotate(search=SearchVector('title', 'description')).filter(search=value)

    class Meta: …
Run Code Online (Sandbox Code Playgroud)

django django-filters django-rest-framework

5
推荐指数
1
解决办法
2281
查看次数