from django.core.exceptions import MultipleObjectsReturned \ as MultipleObjectsReturnedException def __noop(self, *args, **kwargs): """Just a dumb no-op function to make code a bit more DRY""" return None def __noop_list(self, *args, **kwargs): return [] def __noop_dict(self, *args, **kwargs): return {} def __noop_2tup(self, *args, **kwargs): return (Null, Null) def __noop_manager(self, *args, **kwargs): return _inst_manager def __noop_queryset(self, *args, **kwargs): return _inst_queryset # Instantiate for (slight) efficiency _inst_manager = Manager() _inst_queryset = QuerySet() class Model(object): _meta = None objects = _inst_manager id = None pk = None MultipleObjectsReturned = MultipleObjectsReturnedException save = __noop delete = __noop clean = __noop class Manager(object): """ Eliminate E1002 for Manager object """ get_queryset = __noop_queryset # QuerySet API as of Django 1.11 filter = __noop_queryset exclude = __noop_queryset annotate = __noop_queryset order_by = __noop_queryset reverse = __noop_queryset distinct = __noop_queryset values = __noop_queryset values_list = __noop_queryset none = __noop_queryset all = __noop_queryset dates = __noop_queryset datetimes= __noop_queryset none = __noop_queryset all = __noop_queryset union = __noop_queryset intersection = __noop_queryset difference = __noop_queryset select_related = __noop_queryset prefetch_related = __noop_queryset extra = __noop_queryset defer = __noop_queryset only = __noop_queryset using = __noop_queryset select_for_update = __noop_queryset raw = __noop_queryset aggregate = __noop_dict get_or_create = __noop_2tup update_or_create = __noop_2tup get = __noop create = __noop bulk_create = __noop count = __noop in_bulk = __noop iterator = __noop latest = __noop earliest = __noop first = __noop last = __noop exists = __noop update = __noop delete = __noop class QuerySet(Manager, list): # Should have all the manager methods and also quack like a list as_manager = __noop_manager