#24513: "... has no field named None" with M2MField when migrating
---------------------------------+------------------------------------
Reporter: Kondou-ger | Owner: nobody
Type: Bug | Status: new
Component: Migrations | Version: 1.8rc1
Severity: Normal | Resolution:
Keywords: migrations, bug | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+------------------------------------
Comment (by patrys):
Not sure whether I'm on the right path but in
`django/db/migrations/state.py` in `ProjectState.reload_model` the
following happens:
{{{
try:
old_model = self.apps.get_model(app_label, model_name)
except LookupError:
related_models = set()
else:
# Get all relations to and from the old model before reloading,
# as _meta.apps may change
related_models = get_related_models_recursive(old_model)
}}}
The resulting set correctly contains all related m2m models. Later however
this code is run:
{{{
for rel_app_label, rel_model_name in related_models:
try:
model_state = self.models[rel_app_label, rel_model_name]
except KeyError:
pass
else:
states_to_be_rendered.append(model_state)
}}}
This lookup fails for all related m2m models which causes them not to
appear in the to-be-rerendered state list. This in turn results in the m2m
models pointing to the old (previously rendered) version of the altered
class.
I can trigger this problem quite reliably by having the migration first
touch any non-m2m field of the affected class tree (which would cause all
of the related models to be rendered) and then alter an m2m field (which
fails m2m name lookups due to the relations pointing to out of date
models).
--
Ticket URL: <https://code.djangoproject.com/ticket/24513#comment:10>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/068.37c161bcd9cd6542cd25433ab6a98d08%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.