1
0
mirror of https://github.com/django/django.git synced 2025-10-28 08:06:09 +00:00

Modified readiness check in AppConfig.get_model(s).

It was inconsistent with the equivalent check in Apps.get_model(s)
because I made incorrect assumptions when I wrote that code and
needlessly complicated readiness checks.

This is a backwards-incompatible change.
This commit is contained in:
Aymeric Augustin
2016-09-30 21:08:35 +02:00
committed by Tim Graham
parent 20be1918e7
commit efcb7e1ebf
5 changed files with 30 additions and 13 deletions

View File

@@ -1,7 +1,7 @@
import os
from importlib import import_module
from django.core.exceptions import AppRegistryNotReady, ImproperlyConfigured
from django.core.exceptions import ImproperlyConfigured
from django.utils._os import upath
from django.utils.module_loading import module_has_submodule
@@ -21,6 +21,10 @@ class AppConfig(object):
# from 'django/contrib/admin/__init__.pyc'>.
self.module = app_module
# Reference to the Apps registry that holds this AppConfig. Set by the
# registry when it registers the AppConfig instance.
self.apps = None
# The following attributes could be defined at the class level in a
# subclass, hence the test-and-set pattern.
@@ -151,21 +155,13 @@ class AppConfig(object):
# Entry is a path to an app config class.
return cls(app_name, app_module)
def check_models_ready(self):
"""
Raises an exception if models haven't been imported yet.
"""
if self.models is None:
raise AppRegistryNotReady(
"Models for app '%s' haven't been imported yet." % self.label)
def get_model(self, model_name):
"""
Returns the model with the given case-insensitive model_name.
Raises LookupError if no model exists with this name.
"""
self.check_models_ready()
self.apps.check_models_ready()
try:
return self.models[model_name.lower()]
except KeyError:
@@ -186,7 +182,7 @@ class AppConfig(object):
Set the corresponding keyword argument to True to include such models.
Keyword arguments aren't documented; they're a private API.
"""
self.check_models_ready()
self.apps.check_models_ready()
for model in self.models.values():
if model._meta.auto_created and not include_auto_created:
continue

View File

@@ -89,6 +89,7 @@ class Apps(object):
"duplicates: %s" % app_config.label)
self.app_configs[app_config.label] = app_config
app_config.apps = self
# Check for duplicate app names.
counts = Counter(