Django-filter: Kemungkinan untuk menyematkan filterset di yang lain

Dibuat pada 21 Des 2016  ·  10Komentar  ·  Sumber: carltongibson/django-filter

Misalkan kita memiliki 2 model misalnya Siswa dan Sekolah. Kami memiliki filterset untuk siswa, misalnya kita dapat melakukan query dengan birthdate__gt misalnya sekarang kita ingin memiliki filter yang sama persis untuk sekolah tetapi diawali dengan student__ sehingga kita dapat query dengan student__birthdate__gt . Apakah mungkin untuk entah bagaimana menyematkan filterset di yang lain dan membuatnya berlaku untuk foreignkey atau manytomanyfield?

Komentar yang paling membantu

Tidak ada garis waktu, meskipun saya sekarang memiliki waktu luang yang dapat digunakan untuk proyek ini.

Semua 10 komentar

Filter 's name argumen menerima garis bawah ganda untuk melintasi hubungan.

https://django-filter.readthedocs.io/en/develop/ref/filters.html#name

Ini harus memberi Anda apa yang Anda butuhkan, ya?

@carltongibson sayangnya tidak. Saya sudah menggunakan garis bawah ganda. Masalahnya adalah misalkan Student memiliki 15 filter, saat ini saya harus menulis ulang semua 15 filter itu dalam kumpulan filter School dan mengawalinya dengan student__ dan menulis ulang semua filter metode, jika Saya menggunakan 15 filter ini di 10 filter lainnya. Saya harus menulis ulang 10 kali. Jika ada perubahan di filterset utama, saya harus mengurus semua 5 filterset itu secara manual. Saya perlu menulisnya sekali di Student filterset, dan menggunakannya kembali di tempat lain sehingga saya hanya memelihara satu kode bukan 6. Untuk proyek saya dengan banyak kasus seperti ini (banyak ForeignKey s dan ManyToManyField s) itu hanya mimpi buruk untuk menanganinya secara manual.

Hmmm. OKE. Jawaban singkatnya adalah, tidak ada yang terpasang. Tetapi Anda harus dapat melakukan sesuatu dengan Mixin atau semacamnya.

Begitu, jadi bisakah kita menganggap masalah ini sebagai permintaan fitur? Sesuatu seperti django_filter.filters.EmbedFilter(SomeFilterSet, prefix='pre', reltaed_filed='the_field')

Hai @sassanh - Django-rest-framework-filters ? Bahkan jika Anda tidak menggunakan DRF, FilterSet dan RelatedFilter harus tetap dapat digunakan.

Catatan tambahan - Saat ini saya memelihara paket dan sedang dalam proses refactoring cara kerja filterset terkait. Saya akan merekomendasikan membaca masalah terbuka untuk melihat apakah paket tersebut bekerja untuk Anda dalam keadaan saat ini.

Khususnya, ada masalah 99 dan 100 dan perilaku pemfilteran saat merentangkan hubungan multi-nilai . Paket berubah dari sintaks join ke pendekatan subquery, yang menunjukkan perilaku yang lebih benar.

@rpkilby oh hebat, saya melihatnya memiliki banyak fitur bagus lainnya juga. Saya dapat menunda bagian proyek ini sampai versi 1.0 keluar. Apakah ada waktu yang diharapkan untuk versi 1.0?

Tidak ada garis waktu, meskipun saya sekarang memiliki waktu luang yang dapat digunakan untuk proyek ini.

Pendekatan lainnya adalah membangun FilterSet secara dinamis. Ambil inspirasi dari modelform_factory — atau yang serupa.

Anda memiliki kumpulan filter dasar dan kemudian menambahkan bidang tambahan yang memanggil type ...

extra_filters = { ... }   # Dict of Filters
extended_filterset = type('ExtendedFilterSet', (BaseFilterSet,), extra_filters)

Dalam kasus Anda, sepertinya Anda memiliki banyak pengulangan sehingga sesuatu yang dinamis mungkin cocok, tetapi secara umum saya menyarankan sedikit lebih banyak mengetik pada tahap deklarasi untuk menghemat (pemeliharaan) rasa sakit nanti.

terima kasih @carltongibson jika Django-rest-framework-filters belum siap pada saat saya akan menerapkan filter, saya dapat menggunakan rencana cadangan ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

hakib picture hakib  ·  3Komentar

ses4j picture ses4j  ·  4Komentar

chromakey picture chromakey  ·  5Komentar

GuillaumeCisco picture GuillaumeCisco  ·  3Komentar

csarcom picture csarcom  ·  3Komentar