mirror of
https://github.com/django/django.git
synced 2025-10-27 23:56:08 +00:00
Fixed #23621 -- Warn for duplicate models when a module is reloaded.
Previously a RuntimeError was raised every time two models clashed in the app registry. This prevented reloading a module in a REPL; while it's not recommended to do so, we decided not to forbid this use-case by turning the error into a warning. Thanks @dfunckt and Sergey Pashinin for the initial patches.
This commit is contained in:
@@ -208,9 +208,15 @@ class Apps(object):
|
||||
model_name = model._meta.model_name
|
||||
app_models = self.all_models[app_label]
|
||||
if model_name in app_models:
|
||||
raise RuntimeError(
|
||||
"Conflicting '%s' models in application '%s': %s and %s." %
|
||||
(model_name, app_label, app_models[model_name], model))
|
||||
if (model.__name__ == app_models[model_name].__name__ and
|
||||
model.__module__ == app_models[model_name].__module__):
|
||||
warnings.warn(
|
||||
"Model '%s.%s' was already registered." % (model_name, app_label),
|
||||
RuntimeWarning, stacklevel=2)
|
||||
else:
|
||||
raise RuntimeError(
|
||||
"Conflicting '%s' models in application '%s': %s and %s." %
|
||||
(model_name, app_label, app_models[model_name], model))
|
||||
app_models[model_name] = model
|
||||
self.clear_cache()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user