كنت أحاول تنفيذ التصفية الموضحة هنا: http://django-filter.readthedocs.io/en/develop/ref/filters.html#isodatetimefilter
أثناء نجاح هذه الطريقة ، أردت أكثر من مجرد مطابقة "تامة" ، لذلك استبدلت:
fields = ['published']
مع:
fields = {'published': ['exact', 'gte', 'lte']}
لا يزال هذا يعمل من أجل التصفية "الدقيقة" باستخدام IsoDateTime ، ولكن بالنسبة لـ "gte" و "lte" ، فإنه يفشل عند استخدام IsoDateTime. يعمل عند استخدام DateTime.
أنا أستخدم حلاً في الوقت الحالي يعمل مع IsoDateTime من خلال تحديد كل بحث بشكل منفصل:
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')
أمم. كانت ردي الأول هو قبول هذا فقط كحد للقاموس بناء جملة fields
. إعلان الحقول صراحة - "الحل البديل" - هو الطريقة الأساسية للقيام بذلك. يعتبر بناء جملة القاموس مجرد اختصار ، ولا توجد مشكلة في وجود قيود عليه.
بعد قولي هذا ، سأقوم بإجراء تغيير بصمة صغيرة "لإصلاح" هذا ...
يمكنك استخدام Meta.filter_overrides
لتغيير فئة المرشح المستخدمة في حقل النموذج.
class BookFilter(django_filters.FilterSet):
class Meta:
model = Book
fields = {'published': ['exact', 'lte', 'gte']}
filter_overrides = {
models.DateTimeField: {'filter_class': django_filters.IsoDateTimeFilter},
}
carltongibson أنا سعيد بقبول التحديد. حاولت البحث عن "إصلاح" سريع ولكن فهمي للأعمال الداخلية للشفرة محدود للغاية في الوقت الحالي: /
rpkilby شكرًا ، اقتراحك يعمل بشكل جيد ،
carltongibson هل ترغب في ملاحظة هذا القيد في المستندات؟ يسعدني تقديم طلب سحب له إذا كنت تعتقد أنه مناسب.
التعليق الأكثر فائدة
يمكنك استخدام
Meta.filter_overrides
لتغيير فئة المرشح المستخدمة في حقل النموذج.