Apakah mungkin untuk memfilter bidang yang ditentukan dalam django.contrib.postgres.fields
seperti ArrayField
?
Django-filter saat ini tidak memiliki filter apa pun yang kompatibel dengan bidang kontribusi postgres - Anda harus membuatnya sendiri. Ini akan lebih atau kurang sulit tergantung pada apa yang Anda coba lakukan. Mendukung pencarian kustom untuk ArrayField
akan cukup sepele:
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
Filter di atas akan memvalidasi input yang dipisahkan koma dan mengembalikan daftar nilai yang dibersihkan, yang cocok untuk panggilan .filter()
mendasarinya.
Di sisi lain, sedikit lebih rumit untuk menangani transformasi indeks dan irisan, yang tidak terstruktur dan memiliki jumlah kombinasi yang tak terbatas secara teoritis.
Terima kasih atas infonya.
Saya akan menutup ini sebagai Out of Scope untuk saat ini. Senang mempertimbangkan permintaan tarik yang terdokumentasi dan teruji. Kami mungkin memiliki kapasitas untuk mempertimbangkan kembali di masa depan.
Memperbarui:
Parameter name
telah diubah namanya menjadi field_name
sehingga MyFilterSet
akan terlihat seperti:
class MyFilterSet(filters.FilterSet):
tags__contains = CharArrayFilter(field_name='tags', lookup_expr='contains')
class Meta:
model = SomethingTaggable
Komentar yang paling membantu
Django-filter saat ini tidak memiliki filter apa pun yang kompatibel dengan bidang kontribusi postgres - Anda harus membuatnya sendiri. Ini akan lebih atau kurang sulit tergantung pada apa yang Anda coba lakukan. Mendukung pencarian kustom untuk
ArrayField
akan cukup sepele:Filter di atas akan memvalidasi input yang dipisahkan koma dan mengembalikan daftar nilai yang dibersihkan, yang cocok untuk panggilan
.filter()
mendasarinya.Di sisi lain, sedikit lebih rumit untuk menangani transformasi indeks dan irisan, yang tidak terstruktur dan memiliki jumlah kombinasi yang tak terbatas secara teoritis.