Django-filter: Alguém poderia dar um exemplo para usar com o mecanismo de pesquisa de texto completo nativo do Django / Postgres?

Criado em 16 fev. 2019  ·  4Comentários  ·  Fonte: carltongibson/django-filter

Totalmente novato aqui ...

https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/search/#postgresql -fts-search-configuration

Documentation

Comentários muito úteis

Olá, @gotexis. O django-filter basicamente faz duas coisas:

  • Validar entradas
  • Construir consultas a partir dessas entradas

Quando não há uma classe Filter que constrói a consulta que você está procurando, você tem duas opções:

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))

Todos 4 comentários

Olá, @gotexis. O django-filter basicamente faz duas coisas:

  • Validar entradas
  • Construir consultas a partir dessas entradas

Quando não há uma classe Filter que constrói a consulta que você está procurando, você tem duas opções:

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 :)

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

csarcom picture csarcom  ·  3Comentários

sassanh picture sassanh  ·  4Comentários

xtrinch picture xtrinch  ·  4Comentários

Sonictherocketman picture Sonictherocketman  ·  3Comentários

GuillaumeCisco picture GuillaumeCisco  ·  3Comentários