Django Q objects:
Q object encapsulates a SQL expression in a Python object that can be used in database-related operations. Using Q objects we can make complex queries with less and simple code.
For example, this Q object filters whether the question starts wiht 'what':
Q objects are helpfull for complex queries because they can be combined using logical operators and(&), or(|), negation(~)
For example, this statement returns if the question starts with 'who' or with 'what'.
If the operator is not included then by default 'AND' operator is used
The following code is source of Q class:
As you can interpret from above code, we have three operators 'or', 'and' and invert(negation) and the default operator is AND.
Dynamic querying with Q objects:
This is an interesting feature as we can use the operator module to create dynamic queries.
We are performing the or operation using operator.or_
To use and operations simply execute:
Q objects not only simplify complex queries, they are very handy for dynamic filtering.