Django-filter: ¿Alguien podría dar un ejemplo para usar con el motor de búsqueda de texto completo nativo de Django / Postgres?

Creado en 16 feb. 2019  ·  4Comentarios  ·  Fuente: carltongibson/django-filter

Totalmente novato aquí ...

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

Documentation

Comentario más útil

Hola @gotexis. django-filter básicamente hace dos cosas:

  • Validar entradas
  • Construya consultas a partir de esas entradas

Cuando no hay una clase Filter que construya la consulta que está buscando, tiene dos opciones:

  • Escribe una nueva clase de filtro
  • Utilice la función Filter.method .

Si puede generalizar la consulta, escribir un Filter sería más reutilizable; sin embargo, Filter.method es útil para instancias únicas. Escribirías 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 comentarios

Hola @gotexis. django-filter básicamente hace dos cosas:

  • Validar entradas
  • Construya consultas a partir de esas entradas

Cuando no hay una clase Filter que construya la consulta que está buscando, tiene dos opciones:

  • Escribe una nueva clase de filtro
  • Utilice la función Filter.method .

Si puede generalizar la consulta, escribir un Filter sería más reutilizable; sin embargo, Filter.method es útil para instancias únicas. Escribirías 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))

Wow, gracias por tu ayuda @rpkilby , por favor dame algunos días más para digerir este código ...

En este momento me estoy golpeando la cabeza con graphene-django que se integra con django-filtros.

Espero (idealmente) implementar esto con GraphQL

Tenga en cuenta que puede haber algunos problemas con la forma en que graphene-django envuelve django-filter. p. ej., vea el n. ° 927

@rpkilby Sí señor
Parece que, de hecho, hay un montón de problemas con Graphene dado lo impopular que se ha vuelto Python + GraphQL en comparación con Node, además de que el autor está renunciando al proyecto, ¿no estás de acuerdo? :)

Uno de los más recientes, también relacionado con django-filter, es que DjangoFilterConnectionField no funciona con la captación previa, lo que genera toneladas de consultas. No he podido depurarlo, me pregunto si tiene alguna experiencia para compartir :)

¿Fue útil esta página
0 / 5 - 0 calificaciones