# Mixin: class CachedGet(object): def get(self, *args, **kwargs): pk_name = self.model._meta.pk.name if not hasattr(self, '_cache'): self._cache = dict((obj._get_pk_val(), obj) for obj in self.all()) value = len(kwargs) == 1 and kwargs.keys()[0] in ('pk', pk_name, '%s__exact' % pk_name) and self._cache.get(kwargs.values()[0], False) if value: return value else: super(CachedGet, self).get(*args, **kwargs) # Usage: class MyModel(CachedGet, models.Model): # ...