'Given a module containing models, returns a list of the models.
Otherwise returns a list of all installed models.
By default, auto-created models (i.e., m2m models without an
explicit intermediate table) are not included. However, if you
specify include_auto_created=True, they will be.
By default, models created to satisfy deferred attribute
queries are *not* included in the list of models. However, if
you specify include_deferred, they will be.'

def get_models(self, app_mod=None, include_auto_created=False, include_deferred=False):

    cache_key = (app_mod, include_auto_created, include_deferred)
    try:
        return self._get_models_cache[cache_key]
    except KeyError:
        pass
    self._populate()
    if app_mod:
        app_list = [self.app_models.get(app_mod.__name__.split('.')[(-2)], SortedDict())]
    else:
        app_list = self.app_models.itervalues()
    model_list = []
    for app in app_list:
        model_list.extend((model for model in app.values() if (((not model._deferred) or include_deferred) and ((not model._meta.auto_created) or include_auto_created))))
    self._get_models_cache[cache_key] = model_list
    return model_list
