我的应用使用rest-framework
和django-filter
。我使用此FilterSet
提供ModelViewSet
过滤的文章(date
)列表:
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']
我想在我的应用中添加搜索框,因此我需要另一个过滤器,该过滤器将在我的Article
模型中使用全文本搜索。我要搜索的字段是title
和description
。我决定像这样添加带有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:
model = Article
fields = ['pub_date']
它可以工作,但是我不确定这是使用全文本搜索过滤的最佳方法。我是否缺少某些东西,或者这种方法还可以?