36👍
✅
You are just building a string with no relationship to actual Q()
query objects; start with the first Q()
instance and add more:
query = Q(type__type=types[0])
for t in types[1:]:
query |= Q(type__type=t)
projects.filter(query)
You could also use the functools.reduce()
function to do this:
from functools import reduce
from operator import or_
query = reduce(or_, (Q(type__type=t) for t in types))
projects.filter(query)
The reduce()
call does exactly the same thing as the for
loop above; take a series of Q(..)
objects and combine them into a larger query with all the parts combined with |
or operations.
Source:stackexchange.com