جانغو: توسيع مجموعات طلبات / الاتصال مرشحات متعددة مع OR

StackOverflow https://stackoverflow.com/questions/1645778

سؤال

ولدي للعمل مع مجموعة طلبات البحث، الذي تمت تصفيته من قبل، على سبيل المثال. QS = queryset.filter (اللغة = 'دي') ولكن في بعض مزيد من عملية أحتاج إلى التراجع عن بعض من الترشيح لتطبيقها بالفعل، على سبيل المثال لا يستغرق سوى الصفوف مع لغة = 'دي' ولكن الإدخالات في جميع اللغات. هل هناك طريقة لتطبيق الفلتر مرة أخرى ولها معايير جديدة متصلة الموجودة بالفعل باستخدام OR لا تضيف، على سبيل المثال. إذا تم تصفية مجموعة طلبات البحث بالفعل عن لغة = 'دي'، وأود أن تكون قادرة على توصيل 'OR لغة =' أون 'إلى ذلك، فإنه تعطيني ما أنا أبحث عنه! شكرا!

هل كانت مفيدة؟

المحلول

وأنا لا أعتقد أنه من الممكن أن تفعل ما تسألون.

والطريقة التي تفعل نسب الأرجحية في جانغو مثل هذا:

Model.objects.filter(Q(question__startswith='Who') | Q(question__startswith='What'))

وحتى إذا كنت تريد فعلا القيام بذلك:

Model.objects.filter(Q(language='de') | Q(language='en'))

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

وأعتقد أن السبب قد يكون محاولة للقيام بذلك سيكون ذلك كنت تشعر بالقلق إزاء ضرب قاعدة البيانات مرة أخرى ولكن الطريقة الوحيدة للحصول على نتائج دقيقة سيكون لضرب قاعدة البيانات مرة أخرى.

إذا كنت ببساطة تشعر بالقلق إزاء إنتاج، رمز جافة ونظيفة، يمكنك وضع جميع الفلاتر التي هي مشتركة بين كل من الاستفسارات في الجزء العلوي ثم "شوكة" هذا الاستعلام تعيين وقت لاحق، مثل هذا:

shared_qs = Model.objects.filter(active=True)
german_entries = shared_qs.filter(language='de')
german_and_english = shared_qs.filter(Q(language='de') | Q(language='en'))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top