Совершенно нуб здесь ....
https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/search/#postgresql -fts-search-configuration
Привет @gotexis. django-filter в основном делает две вещи:
Когда нет класса Filter
который создает
Filter.method
.Если вы можете обобщить запрос, написание пользовательского Filter
было бы более удобным для повторного использования, однако Filter.method
полезно для разовых экземпляров. Вы бы написали что-то вроде:
from django.contrib.postgres.search import SearchQuery, SearchVector
from djanog_filters import FilterSet, CharFilter
class F(FilterSet):
# The model `field_name` is the field you want to search on and is passed to your `method`.
# The `method` argument is the name of the method to call to perform filtering.
search = CharFilter(field_name='body_text', method='search_fulltext')
def search_fulltext(self, queryset, field_name, value):
return queryset \
.annotate(search=SearchVector(field_name)) \
.filter(search=SearchQuery(value))
Вау, спасибо за помощь @rpkilby , пожалуйста, дайте мне еще несколько дней, чтобы переварить этот код ...
Прямо сейчас я бью головой о graphene-django, который интегрируется с django-фильтрами.
Я надеюсь (в идеале) реализовать это с помощью GraphQL
Обратите внимание, что могут быть некоторые проблемы с тем, как graphene-django обертывает django-filter. например, см. # 927
@rpkilby Да, сэр
Похоже, что с Graphene действительно есть куча проблем, учитывая, насколько непопулярным стал Python + GraphQL по сравнению с Node, плюс автор отказывается от проекта, согласны ли вы :)
Одним из самых последних, также связанных с django-filter, является их DjangoFilterConnectionField, который не работает с предварительной выборкой, что приводит к множеству запросов. Мне не удалось его отладить, интересно, есть ли у вас какой-нибудь опыт, которым можно поделиться :)
Самый полезный комментарий
Привет @gotexis. django-filter в основном делает две вещи:
Когда нет класса
Filter
который создаетFilter.method
.Если вы можете обобщить запрос, написание пользовательского
Filter
было бы более удобным для повторного использования, однакоFilter.method
полезно для разовых экземпляров. Вы бы написали что-то вроде: