Django-filter: تكامل DRF لا يعمل لإجراءات مجموعة العرض الإضافية

تم إنشاؤها على ١٦ أغسطس ٢٠١٨  ·  9تعليقات  ·  مصدر: carltongibson/django-filter

لدي إجراءات قائمة متعددة في مجموعة عرض واحدة عن طريق استخدام action decorator كما هو موضح هنا وقمت بتضمين FilterSet عبر filter_class كما هو محدد في المستندات هنا . يتم تطبيق المرشحات فقط على قائمة ViewSet List الافتراضية وإجراءات الاسترداد وليس أي من القائمة المخصصة أو إجراءات الاسترداد التي نحتاج فيها بالفعل إلى عوامل التصفية.

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

لقد نجحت في العمل بمجرد نقل المكالمة على النحو التالي

@action(methods=['GET'], detail=False)
def simplelist(self, request, *args, **kwargs):
    qs = self.filter_queryset(self.get_queryset())
    serializer = SpecializedModelListSerializer(qs, many=True)
    return Response(serializer.data, status=status.HTTP_200_OK)

شكرا للمساعدة!!!

ال 9 كومينتر

مرحبًا @ estianross. تحتاج إلى تقديم مزيد من التفاصيل إذا كنا سنكون قادرين على التعليق.

هل أنت متأكد من أن الإجراءات الإضافية الخاصة بك تستدعي filter_queryset() ؟

إنهم يفعلون ذلك ، لكنني متأكد تمامًا من أنني لا أستخدمها بالطريقة التي يجب استخدامها إذا كان هذا هو موضع المشكلة ، لقد قمت بتضمين نموذج بسيط للإجراء أدناه لإظهار أساسيات ما أفعله في هذه الإجراءات

@action(methods=['GET'], detail=False)
def simplelist(self, request, *args, **kwargs):
    serializer = SpecializedModelListSerializer(self.filter_queryset(self.get_queryset()), many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

أقترح عليك إنشاء APITestCase وتوصيل معلمات url + الاستعلام التي تتوقعها بها. ستتمكن بعد ذلك من عمل تأكيدات وإدراج نقاط توقف حسب الحاجة لمعرفة أين تسوء الأمور بالنسبة لك.

(أخشى أنه بدون المزيد من التفاصيل ، من المستحيل أن تكون قادرًا على تقديم المشورة على الإطلاق).

لقد نجحت في العمل بمجرد نقل المكالمة على النحو التالي

@action(methods=['GET'], detail=False)
def simplelist(self, request, *args, **kwargs):
    qs = self.filter_queryset(self.get_queryset())
    serializer = SpecializedModelListSerializer(qs, many=True)
    return Response(serializer.data, status=status.HTTP_200_OK)

شكرا للمساعدة!!!

لا يبدو أن هذا يعمل في معظم حالاتي.

أعتقد أنه يجب إعادة فتح هذه المشكلة. لدي نفس المشكلة والحل المقترح يعمل معي.

action (طرق = ['get'] ، تفاصيل = صحيح ، url_path = 'استرداد_بي_كارد_no / (<int: CardNo>)')
def getByCarNo (self، request، CardNo):
المستخدم = get_object_or_404 (Employe_model، EmpCardNo = CardNo)
عودة الاستجابة (serializers.EmployeeInfoSerializer (المستخدم). البيانات ، الحالة = الحالة. HTTP_200_OK)

أريد البحث عن موظف ببطاقته لا بدلاً من هوية الموظف

يمكن لأي شخص أن يساعدني؟

أعتقد أن تكامل عامل التصفية يعمل بشكل صحيح إذا قمت بتمرير معلمات الاستعلام جنبًا إلى جنب مع الإجراء الخاص بك في عنوان URL. أدناه كان العمل الذي قمت به

@action(methods=['GET'], detail=False)
def export(self, request): 
    queryset = self.get_queryset()
    filtered_queryset = self.filter_queryset(queryset)

عند محاولة استدعاء إجراء التصدير من واجهة برمجة تطبيقات DRF القابلة للتصفح ، كان الطلب الذي تم إرساله
/ api / viewname / export / بدلا من ذلك يجب أن يسمى مثل
/ api / viewname / export /؟ query_param_1 = value1 &؟ query_param_2 = value2

سيؤدي تمرير معلمات الاستعلام مع الإجراء إلى استدعاء فئة عوامل التصفية ، وبالتالي ستحصل على مجموعة استعلام تمت تصفيتها في متغير filtered_queryset

شكرا جزيلا لقد فهمت ذلك

يوم الأربعاء 28 نيسان (أبريل) 2021 الساعة 12:32 صباحًا Mohammed Sunasra @ . * >
كتب:

أعتقد أن تكامل عامل التصفية يعمل بشكل صحيح إذا نجحت في اجتياز الاستعلام
المعلمات جنبًا إلى جنب مع الإجراء الخاص بك في عنوان URL. أدناه كان العمل الذي قمت به

action (الأساليب = ['GET'] ، التفاصيل = خطأ)
تصدير def (ذاتي ، طلب):
queryset = self.get_queryset ()
filtered_queryset = self.filter_queryset (مجموعة الاستعلام)

عند محاولة استدعاء إجراء التصدير من واجهة برمجة تطبيقات DRF القابلة للتصفح ، يكون الطلب
التي تم إرسالها كانت
/ api / viewname / export / بدلا من ذلك يجب أن يسمى مثل
/ api / viewname / export /؟ query_param_1 = value1 &؟ query_param_2 = value2

سيؤدي تمرير معلمات الاستعلام مع الإجراء إلى استدعاء مجموعة عوامل التصفية
class ومن ثم ستحصل على مجموعة استعلام تمت تصفيتها في filtered_queryset
عامل

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/carltongibson/django-filter/issues/967#issuecomment-828220562 ،
أو إلغاء الاشتراك
https://github.com/notifications/unsubscribe-auth/AMD2QQXC6FGISRWTHRAGUSTTK62Y7ANCNFSM4FP6FMMQ
.

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