'Pass in a callable that returns the object to be wrapped.
If copies are made of the resulting SimpleLazyObject, which can happen
in various circumstances within Django, then you must ensure that the
callable can be safely run more than once and will return the same
value.'

def __init__(self, func):

    self.__dict__['_setupfunc'] = func
    super().__init__()
