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:
committed by
Tim Graham
parent
20be1918e7
commit
efcb7e1ebf
@@ -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
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user