#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): I believe I have tracked it down further: In `django/db/backends/sqlite3/schema.py` line 234 (`_alter_many_to_many`) we have: {{{ override_uniques=(new_field.m2m_field_name(), new_field.m2m_reverse_field_name()) }}} However `new_field.m2m_field_name()` return `None`. `new_field.m2m_field_name()` is a partial that evaluates to `self._get_m2m_attr(related, 'name')` where `related` is a class the relation is pointing to. The implementation lives in `django/db/models/fields/related.py` line 2470 (`_get_m2m_attr`): {{{ for f in self.rel.through._meta.fields: if (f.is_relation and f.rel.to == related.related_model and (link_field_name is None or link_field_name == f.name)): }}} However at this point `f.rel.to` and `related` point to two different classes that are not considered equal. This could be caused by the fact that the operation is an `AlterField` and it creates two states of the affected class—one before and one after the migration—even though all of the changes happen in a separate m2m model. -- Ticket URL: <https://code.djangoproject.com/ticket/24513#comment:9> 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 django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/068.30b7030e00712676ef01baa2db239997%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.