Est-il possible de filtrer les champs définis dans django.contrib.postgres.fields
comme ArrayField
?
django-filter n'a actuellement aucun filtre compatible avec les champs de contribution postgres - vous devrez créer le vôtre. Ce sera plus ou moins difficile selon ce que vous essayez de faire. La prise en charge des recherches personnalisées pour ArrayField
serait assez simple :
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
Le filtre ci-dessus validera les entrées séparées par des virgules et renverra une liste de valeurs nettoyées, qui convient à l'appel .filter()
sous-jacent.
En revanche, c'est un peu plus compliqué de gérer les transformations d'index et de slice, qui ne sont pas structurées et ont une quantité théoriquement infinie de combinaisons.
Merci pour l'information.
Je vais clore ceci comme hors champ pour le moment. Heureux d'examiner les demandes d'extraction documentées et testées. Nous pourrions avoir la capacité de reconsidérer à l'avenir.
Mettre à jour:
Le paramètre name
a été renommé en field_name
donc le MyFilterSet
devrait ressembler à :
class MyFilterSet(filters.FilterSet):
tags__contains = CharArrayFilter(field_name='tags', lookup_expr='contains')
class Meta:
model = SomethingTaggable
Commentaire le plus utile
django-filter n'a actuellement aucun filtre compatible avec les champs de contribution postgres - vous devrez créer le vôtre. Ce sera plus ou moins difficile selon ce que vous essayez de faire. La prise en charge des recherches personnalisées pour
ArrayField
serait assez simple :Le filtre ci-dessus validera les entrées séparées par des virgules et renverra une liste de valeurs nettoyées, qui convient à l'appel
.filter()
sous-jacent.En revanche, c'est un peu plus compliqué de gérer les transformations d'index et de slice, qui ne sont pas structurées et ont une quantité théoriquement infinie de combinaisons.