Django Building A Queryset With Q Objects
I have a form that allows you to pick multiple project types to filter from. For instance, say you have the project types 'Research', 'Training', and 'Evaluation'. Basically what
Solution 1:
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.
Post a Comment for "Django Building A Queryset With Q Objects"