One of Django’s cool (maybe the coolest) and undocumented feature is being able to OR and AND queries using bitwise (& and |) operators. It is a variation to the Q object that is documented.
1 2 3 4 5 |
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:
1 2 3 4 5 |
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