from django.db.models import Manager, Q, QAnd, QOr, QNot def get_query(obj): if isinstance(obj, Manager): return obj.query return obj class CustomQueryManager(Manager): def __init__(self, query=None): if query: self.query = query Manager.__init__(self) def __and__(self, q): return self.__class__(self.query & get_query(q)) def __or__(self, q): return self.__class__(self.query | get_query(q)) def not_(self): return self.__class__(QNot(self.query)) def get_query_set(self): return Manager.get_query_set(self).filter(self.query)