পুরানো আনসভেরার মতো, তবে ল্যাম্বডা ছাড়াই কিছুটা সহজ:
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
ডাস্ট্রিং থেকে:
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) | ...)