Totalmente novato aqui ...
https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/search/#postgresql -fts-search-configuration
Olá, @gotexis. O django-filter basicamente faz duas coisas:
Quando não há uma classe Filter
que constrói a consulta que você está procurando, você tem duas opções:
Filter.method
.Se você puder generalizar a consulta, escrever um Filter
seria mais reutilizável; no entanto, Filter.method
é útil para instâncias únicas. Você escreveria algo como:
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))
Nossa, obrigado por sua ajuda @rpkilby , por favor me dê mais alguns dias para digerir este código ...
Agora estou batendo minha cabeça com grafeno-django que se integra com filtros de django.
Espero (idealmente) implementar isso com GraphQL
Note que pode haver alguns problemas em como o graphene-django envolve o django-filter. por exemplo, consulte # 927
@rpkilby Sim senhor
Parece que há de fato montes de problemas com grafeno dadas como impopular Python + GraphQL tornou-se, em comparação com Nó, mais o autor está desistindo do projeto, você não concordaria :)
Um dos mais recentes, também relacionado ao django-filter, é que o DjangoFilterConnectionField não funciona com pré-busca, resultando em toneladas de consultas. Tenho falhado em depurá-lo, gostaria de saber se você tem alguma experiência para compartilhar :)
Comentários muito úteis
Olá, @gotexis. O django-filter basicamente faz duas coisas:
Quando não há uma classe
Filter
que constrói a consulta que você está procurando, você tem duas opções:Filter.method
.Se você puder generalizar a consulta, escrever um
Filter
seria mais reutilizável; no entanto,Filter.method
é útil para instâncias únicas. Você escreveria algo como: