mirror of https://github.com/django/django.git
Fixed #22563: Ignore AUTH_USER_MODEL errors in from_state
This commit is contained in:
parent
7fe60ae64a
commit
5182efce8d
|
@ -50,7 +50,7 @@ class MigrationAutodetector(object):
|
||||||
"""
|
"""
|
||||||
# We'll store migrations as lists by app names for now
|
# We'll store migrations as lists by app names for now
|
||||||
self.migrations = {}
|
self.migrations = {}
|
||||||
old_apps = self.from_state.render()
|
old_apps = self.from_state.render(ignore_swappable=True)
|
||||||
new_apps = self.to_state.render()
|
new_apps = self.to_state.render()
|
||||||
# Prepare lists of old/new model keys that we care about
|
# Prepare lists of old/new model keys that we care about
|
||||||
# (i.e. ignoring proxy ones and unmigrated ones)
|
# (i.e. ignoring proxy ones and unmigrated ones)
|
||||||
|
|
|
@ -38,7 +38,7 @@ class ProjectState(object):
|
||||||
real_apps=self.real_apps,
|
real_apps=self.real_apps,
|
||||||
)
|
)
|
||||||
|
|
||||||
def render(self, include_real=None):
|
def render(self, include_real=None, ignore_swappable=False):
|
||||||
"Turns the project state into actual models in a new Apps"
|
"Turns the project state into actual models in a new Apps"
|
||||||
if self.apps is None:
|
if self.apps is None:
|
||||||
# Any apps in self.real_apps should have all their models included
|
# Any apps in self.real_apps should have all their models included
|
||||||
|
@ -75,23 +75,15 @@ class ProjectState(object):
|
||||||
try:
|
try:
|
||||||
model = self.apps.get_model(lookup_model[0], lookup_model[1])
|
model = self.apps.get_model(lookup_model[0], lookup_model[1])
|
||||||
except LookupError:
|
except LookupError:
|
||||||
# If the lookup failed to something that looks like AUTH_USER_MODEL,
|
if "%s.%s" % (lookup_model[0], lookup_model[1]) == settings.AUTH_USER_MODEL and ignore_swappable:
|
||||||
# give a better error message about how you can't change it (#22563)
|
continue
|
||||||
extra_message = ""
|
|
||||||
if "%s.%s" % (lookup_model[0], lookup_model[1]) == settings.AUTH_USER_MODEL:
|
|
||||||
extra_message = (
|
|
||||||
"\nThe missing model matches AUTH_USER_MODEL; if you've changed the value of this" +
|
|
||||||
"\nsetting after making a migration, be aware that this is not supported. If you" +
|
|
||||||
"\nchange AUTH_USER_MODEL you must delete and recreate migrations for its app."
|
|
||||||
)
|
|
||||||
# Raise an error with a best-effort helpful message
|
# Raise an error with a best-effort helpful message
|
||||||
# (only for the first issue). Error message should look like:
|
# (only for the first issue). Error message should look like:
|
||||||
# "ValueError: Lookup failed for model referenced by
|
# "ValueError: Lookup failed for model referenced by
|
||||||
# field migrations.Book.author: migrations.Author"
|
# field migrations.Book.author: migrations.Author"
|
||||||
raise ValueError("Lookup failed for model referenced by field {field}: {model[0]}.{model[1]}{extra_message}".format(
|
raise ValueError("Lookup failed for model referenced by field {field}: {model[0]}.{model[1]}".format(
|
||||||
field=operations[0][1],
|
field=operations[0][1],
|
||||||
model=lookup_model,
|
model=lookup_model,
|
||||||
extra_message=extra_message,
|
|
||||||
))
|
))
|
||||||
else:
|
else:
|
||||||
do_pending_lookups(model)
|
do_pending_lookups(model)
|
||||||
|
|
Loading…
Reference in New Issue