Ist es möglich, in django.contrib.postgres.fields
definierte Felder wie ArrayField
zu filtern?
django-filter hat derzeit keine Filter, die mit den Postgres-Contrib-Feldern kompatibel sind - Sie müssen Ihre eigenen erstellen. Es wird mehr oder weniger schwierig sein, je nachdem, was Sie versuchen. Die Unterstützung der benutzerdefinierten Lookups für ArrayField
wäre ziemlich 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
Der obige Filter validiert die durch Kommas getrennten Eingaben und gibt eine Liste bereinigter Werte zurück, die für den zugrunde liegenden .filter()
Aufruf geeignet ist.
Auf der anderen Seite ist es etwas komplizierter, die Index- und Slice-Transformationen zu handhaben, die unstrukturiert sind und eine theoretisch unendliche Anzahl von Kombinationen haben.
Danke für die Information.
Ich werde dies vorerst als Out of Scope schließen. Gerne Berücksichtigung dokumentierter, getesteter Pull-Requests. Vielleicht haben wir in Zukunft die Möglichkeit, das zu überdenken.
Aktualisieren:
Der Parameter name
wurde in field_name
sodass MyFilterSet
wie folgt aussehen sollte:
class MyFilterSet(filters.FilterSet):
tags__contains = CharArrayFilter(field_name='tags', lookup_expr='contains')
class Meta:
model = SomethingTaggable
Hilfreichster Kommentar
django-filter hat derzeit keine Filter, die mit den Postgres-Contrib-Feldern kompatibel sind - Sie müssen Ihre eigenen erstellen. Es wird mehr oder weniger schwierig sein, je nachdem, was Sie versuchen. Die Unterstützung der benutzerdefinierten Lookups für
ArrayField
wäre ziemlich trivial:Der obige Filter validiert die durch Kommas getrennten Eingaben und gibt eine Liste bereinigter Werte zurück, die für den zugrunde liegenden
.filter()
Aufruf geeignet ist.Auf der anderen Seite ist es etwas komplizierter, die Index- und Slice-Transformationen zu handhaben, die unstrukturiert sind und eine theoretisch unendliche Anzahl von Kombinationen haben.