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?
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.
Komentar yang paling membantu
Tidak ada garis waktu, meskipun saya sekarang memiliki waktu luang yang dapat digunakan untuk proyek ini.