É possível filtrar campos definidos em django.contrib.postgres.fields
como ArrayField
?
django-filter atualmente não tem nenhum filtro compatível com os campos contrib do postgres - você precisa criar o seu próprio. Será mais ou menos difícil dependendo do que você está tentando fazer. Apoiar as pesquisas personalizadas para ArrayField
seria 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
O filtro acima validará as entradas separadas por vírgula e retornará uma lista de valores limpos, que é adequada para a chamada .filter()
subjacente.
Por outro lado, é um pouco mais complicado lidar com as transformações de índice e fatia, que não são estruturadas e têm uma quantidade teoricamente infinita de combinações.
Obrigado pela informação.
Vou encerrar como Fora do escopo por enquanto. Fico feliz em considerar solicitações de pull testadas e documentadas. Podemos ter capacidade de reconsiderar no futuro.
Atualizar:
O parâmetro name
foi renomeado para field_name
então MyFilterSet
deve ser parecido com:
class MyFilterSet(filters.FilterSet):
tags__contains = CharArrayFilter(field_name='tags', lookup_expr='contains')
class Meta:
model = SomethingTaggable
Comentários muito úteis
django-filter atualmente não tem nenhum filtro compatível com os campos contrib do postgres - você precisa criar o seu próprio. Será mais ou menos difícil dependendo do que você está tentando fazer. Apoiar as pesquisas personalizadas para
ArrayField
seria bastante trivial:O filtro acima validará as entradas separadas por vírgula e retornará uma lista de valores limpos, que é adequada para a chamada
.filter()
subjacente.Por outro lado, é um pouco mais complicado lidar com as transformações de índice e fatia, que não são estruturadas e têm uma quantidade teoricamente infinita de combinações.