In general Q objects allow you to define and reuse conditions - if I can ever get around to a few thorny edge issues, I'll finish up:

https://code.djangoproject.com/ticket/18931