Django-filter: Perbandingan masalah IsoDateTimeFilter selain 'tepat'

Dibuat pada 14 Sep 2017  ·  3Komentar  ·  Sumber: carltongibson/django-filter

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')

Komentar yang paling membantu

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},
        }

Semua 3 komentar

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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat