diff --git a/django/db/models/loading.py b/django/db/models/loading.py index 10ff3bb8d8..3d34845147 100644 --- a/django/db/models/loading.py +++ b/django/db/models/loading.py @@ -32,18 +32,25 @@ def get_apps(): _app_errors[app_name] = e return _app_list -def get_app(app_label): - "Returns the module containing the models for the given app_label." +def get_app(app_label, emptyOK = False): + "Returns the module containing the models for the given app_label. If the app has no models in it and 'emptyOK' is True, returns None." get_apps() # Run get_apps() to populate the _app_list cache. Slightly hackish. for app_name in settings.INSTALLED_APPS: if app_label == app_name.split('.')[-1]: - return load_app(app_name) + mod = load_app(app_name) + if mod is None: + if emptyOK: + return None + else: + return mod raise ImproperlyConfigured, "App with label %s could not be found" % app_label def load_app(app_name): "Loads the app with the provided fully qualified name, and returns the model module." global _app_list mod = __import__(app_name, '', '', ['models']) + if not hasattr(mod, 'models'): + return None if mod.models not in _app_list: _app_list.append(mod.models) return mod.models