Django-filter: لا يعمل django_filters.BooleanFilter مع الطريقة والمرشح المنطقي الموروث من نموذج بنفس الطريقة.

تم إنشاؤها على ٢٤ أبريل ٢٠١٧  ·  3تعليقات  ·  مصدر: carltongibson/django-filter

لقد واجهت مشكلة تتمثل في أن عامل التصفية المنطقي الذي تم إنشاؤه بواسطة django_filters.BooleanFilter يتوقع معلمات استعلام مختلفة باستخدام عامل التصفية المنطقي الموروث من النموذج.
يتوقع المرشح المنطقي الموروث من النموذج أن تكون المعلمة صحيحة أو خاطئة ، ويتوقع المرشح الذي تم إنشاؤه بواسطة BooleanFilter أن تكون المعلمات إما:
1 - ترجم إلى "غير محدد"
2 - ترجم إلى "True"
3 - ترجم الى "False"
هذا السلوك يجعل من غير الواضح كيفية معالجة بقية عوامل التصفية المخصصة لواجهة برمجة التطبيقات من جانب جافا سكريبت.

رمز المثال:

نماذج. py:
class TestModel(models.Model): first = models.BooleanField() last = models.BooleanField()
api.py

`استيراد django_filters
من مجموعة عروض استيراد rest_framework والمسلسلات
من نماذج استيراد TestModel

فئة TestFilter (django_filters.rest_framework.FilterSet):
first_and_last = django_filters.BooleanFilter (الطريقة = 'first_and_last_filter')
def first_and_last_filter (self، queryset، name، value):
إذا كانت القيمة == صحيح:
إرجاع الاستعلامset.filter (الأول = صواب ، والأخير = صواب) ؛
مجموعة استعلام العودة ؛
فئة ميتا:
النموذج = TestModel
الحقول = ['first'، 'last'، 'first_and_last']

فئة TestSerializer (مسلسلات.ModelSerializer):
فئة ميتا:
النموذج = TestModel
الحقول = ['الأول' ، 'الأخير']

فئة TestViewSet (viewets.ModelViewSet):
النموذج = TestModel
مجموعة الاستعلام = TestModel.objects.all ()
serializer_class = TestSerializer
filter_backends = (django_filters.rest_framework.DjangoFilterBackend ،)
filter_fields = ('الأول' ، 'الأخير' ، 'first_and_last' ،)
filter_class = TestFilter`

يتوقع مرشح مجموعة طرق الاختبار هنا أن تكون معلمة الاستعلام "صواب" أو "خطأ" للحقول "الأولى" و "الأخيرة" ، ولكنها تتوقع أن تكون 1 ، 2 أو 3 لحقل التصفية "الأول والأخير".
على سبيل المثال تصفية الاستعلام البارد يكون مثل هذا:
/ api / test /؟ first = true & first_and_last = 2

هذا مثال مبسط في المشروع الحقيقي الذي صادفته ، يحتوي الفلتر المخصص على منطق أكثر تعقيدًا.
لقد قمت بإعداد الريبو مع جميع الأكواد اللازمة لإعادة إنتاج المشكلة.
https://github.com/inakrin/boolfilter

التعليق الأكثر فائدة

مرحباinakrin. يجب استيراد filters من الحزمة الفرعية rest_framework .

https://github.com/carltongibson/django-filter/blob/develop/django_filters/rest_framework/filters.py

ال 3 كومينتر

مرحباinakrin. يجب استيراد filters من الحزمة الفرعية rest_framework .

https://github.com/carltongibson/django-filter/blob/develop/django_filters/rest_framework/filters.py

لذلك ربما ينبغي ذكره في وثائق DRF لأنهم يقترحون الاستيراد من المرشحات:
http://www.django-rest-framework.org/api-guide/filtering/#specifying -a-filteret
وهو يعمل بالطبع في جميع الحالات باستثناء BooleanFilter.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات