¿Es posible filtrar los campos definidos en django.contrib.postgres.fields
como ArrayField
?
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
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: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.