Django-filter: ArrayField de filtrado

Creado en 24 ago. 2016  ·  4Comentarios  ·  Fuente: carltongibson/django-filter

¿Es posible filtrar los campos definidos en django.contrib.postgres.fields como ArrayField ?

Comentario más útil

django-filter actualmente no tiene ningún filtro compatible con los campos contrib de postgres; necesitaría crear el suyo propio. Será más o menos difícil según lo que intentes hacer. Apoyar las búsquedas personalizadas para ArrayField sería bastante trivial:

class CharArrayFilter(filters.BaseCSVFilter, filters.CharFilter):
     pass

class MyFilterSet(filters.FilterSet):
    tags__contains = CharArrayFilter(name='tags', lookup_expr='contains')

    class Meta:
        model = SomethingTaggable
GET http://localhost/api/something-taggable?tags__contains=a,b,c

El filtro anterior validará las entradas separadas por comas y devolverá una lista de valores limpios, que es adecuada para la llamada .filter() subyacente.

Por otro lado, es un poco más complicado manejar las transformaciones de índice y corte, que no están estructuradas y tienen una cantidad teóricamente infinita de combinaciones.

Todos 4 comentarios

django-filter actualmente no tiene ningún filtro compatible con los campos contrib de postgres; necesitaría crear el suyo propio. Será más o menos difícil según lo que intentes hacer. Apoyar las búsquedas personalizadas para ArrayField sería bastante trivial:

class CharArrayFilter(filters.BaseCSVFilter, filters.CharFilter):
     pass

class MyFilterSet(filters.FilterSet):
    tags__contains = CharArrayFilter(name='tags', lookup_expr='contains')

    class Meta:
        model = SomethingTaggable
GET http://localhost/api/something-taggable?tags__contains=a,b,c

El filtro anterior validará las entradas separadas por comas y devolverá una lista de valores limpios, que es adecuada para la llamada .filter() subyacente.

Por otro lado, es un poco más complicado manejar las transformaciones de índice y corte, que no están estructuradas y tienen una cantidad teóricamente infinita de combinaciones.

Gracias por la información.

Voy a cerrar esto como Fuera de alcance por el momento. Feliz de considerar solicitudes de extracción probadas y documentadas. Es posible que tengamos capacidad para reconsiderarlo en el futuro.

Actualizar:
El parámetro name ha sido renombrado a field_name por lo que MyFilterSet debería verse así:

class MyFilterSet(filters.FilterSet):
    tags__contains = CharArrayFilter(field_name='tags', lookup_expr='contains')

    class Meta:
        model = SomethingTaggable
¿Fue útil esta página
0 / 5 - 0 calificaciones