Мое приложение использует 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']
Это работает, но я не уверен, что это лучший способ использования фильтрации полнотекстового поиска.Я что-то упустил или этот подход в порядке?