पुराने उत्तर के समान, लेकिन थोड़ा सा सरल, लंबोदर के बिना:
filter_kwargs = {
'field_a': 123,
'field_b__in': (3, 4, 5, ),
}
इन दो स्थितियों को फ़िल्टर करने के लिए OR
:
Item.objects.filter(Q(field_a=123) | Q(field_b__in=(3, 4, 5, ))
कार्यक्रम के समान परिणाम प्राप्त करने के लिए:
list_of_Q = [Q(**{key: val}) for key, val in filter_kwargs.items()]
Item.objects.filter(reduce(operator.or_, list_of_Q))
(यहाँ दो लाइनों में टूट गया, स्पष्टता के लिए)
operator
मानक पुस्तकालय में है: import operator
docstring से:
or_ (a, b) - समान | ख।
पायथन 3 के लिए, बिल्टिन reduce
नहीं है , लेकिन अभी भी मानक पुस्तकालय में है:from functools import reduce
पुनश्च
यह सुनिश्चित करने के लिए मत भूलें कि list_of_Q
खाली नहीं है - reduce()
खाली सूची पर चोक होगा, इसे कम से कम एक तत्व की आवश्यकता है।
for f in filters: Item.objects.filter(Q(creator=f1) | Q(creator=f2) | ...)