Django-filter: Memfilter ArrayField

Dibuat pada 24 Agu 2016  ·  4Komentar  ·  Sumber: carltongibson/django-filter

Apakah mungkin untuk memfilter bidang yang ditentukan dalam django.contrib.postgres.fields seperti ArrayField ?

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:

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.

Semua 4 komentar

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
Apakah halaman ini membantu?
0 / 5 - 0 peringkat