Saya telah mencoba menerapkan pemfilteran yang dijelaskan di sini: http://Django-filter.readthedocs.io/en/develop/ref/filters.html#isodatetimefilter
Sementara metode itu berfungsi, saya menginginkan lebih dari sekadar pencocokan 'tepat', jadi saya mengganti:
fields = ['published']
dengan:
fields = {'published': ['exact', 'gte', 'lte']}
Ini masih berfungsi untuk pemfilteran 'tepat' dengan IsoDateTime, tetapi untuk 'gte' dan 'lte', gagal saat menggunakan IsoDateTime. Ini berfungsi saat menggunakan DateTime.
Saya menggunakan solusi saat ini yang berfungsi dengan IsoDateTime dengan menentukan setiap pencarian secara terpisah:
published = django_filters.IsoDateTimeFilter(
name='published', lookup_expr='exact')
published_gte = django_filters.IsoDateTimeFilter(
name='published', lookup_expr='gte')
published_lte = django_filters.IsoDateTimeFilter(
name='published', lookup_expr='lte')
Hmmm. Tanggapan pertama saya untuk hanya menerima ini sebagai batasan sintaks kamus fields
. Mendeklarasikan bidang secara eksplisit — "solusi" Anda — adalah cara kanonik untuk melakukannya. Sintaks kamus hanyalah jalan pintas, dan tidak ada masalah dengan keterbatasannya.
Karena itu, saya akan mengambil perubahan dengan jejak kecil untuk "memperbaiki" ini ...
Anda dapat menggunakan Meta.filter_overrides
untuk mengubah kelas filter yang digunakan untuk bidang model.
class BookFilter(django_filters.FilterSet):
class Meta:
model = Book
fields = {'published': ['exact', 'lte', 'gte']}
filter_overrides = {
models.DateTimeField: {'filter_class': django_filters.IsoDateTimeFilter},
}
@carltongibson Saya senang menerima batasan. Saya mencoba mencari "perbaikan" cepat tetapi pemahaman saya tentang cara kerja kode terlalu terbatas saat ini:/
@rpkilby Terima kasih, saran Anda berfungsi dengan baik, saya akan menggunakannya ke depan :)
@carltongibson Apakah Anda ingin mencatat batasan ini di dokumen? Saya senang membuat permintaan tarik jika menurut Anda itu pantas.
Komentar yang paling membantu
Anda dapat menggunakan
Meta.filter_overrides
untuk mengubah kelas filter yang digunakan untuk bidang model.