Last Updated: February 25, 2016
·
784
· pykler

Django OR querysets

One of Django's cool (maybe the coolest) and undocumented feature is being able to OR and AND queries using bitwise (&|) operators. It is a variation to the Q object that is documented.

for r in (
    MyTable.objects.filter(somefield='a') |
    MyTable.objects.filter(someotherfield='b')
).filter(somethird='c'):
    print r

Now this becomes really useful when you use related_managers:

for r in (
    aTableinstance.mytable_set.all() |
    xTableinstance.mytable_set.all()
):
    do_something_with(r)

while aTable and xTable are totally different instances yet they reference MyTable