Skip to content Skip to sidebar Skip to footer

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"