كيف يمكنني تمرير قائمة كيو إس لتصفية OR عمليات البحث؟

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

سؤال

وكيف أمرر قائمة كيو إس لتصفية OR عمليات البحث؟ شيء من هذا القبيل:

q_list = [Q(xyz__isnull=True), Q(x__startswith='x')]?

وبدون لائحة أود أن تفعل:

Model.objects.filter(Q(xyz__isnull=True) | Q(x__startswith='x'))
هل كانت مفيدة؟

المحلول

واستخدام الثعبان في الحد () وظيفة:

import operator
reduced_q = reduce(operator.or_, q_list)
Model.objects.filter(reduced_q)

نصائح أخرى

ويكون الأجسام Q أيضا وسيلة add التي تأخذ كائن آخر Q وموصل Q (إما AND أو OR).

q_object = Q(xyz__isnull=True)
q_object.add(Q(x__startswith='x'), Q.OR)

ولقد وجدت أن يكون مفيدا عند بناء أو الفلاتر ولقد كتبت سبيل المثال أطول على بلدي بلوق: <لأ href = "http://bradmontgomery.blogspot.com/2009/06/adding-q- الكائنات في django.html "يختلط =" noreferrer ">" إضافة "الأجسام Q في جانغو

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top