-
Notifications
You must be signed in to change notification settings - Fork 53
Error during application of M2M migrations #56
Comments
I'm receiving the same error while trying to run a migration with an VM2M field, but was unable to get the above workaround to fix the error. Here is the snippet of the migration that references a VersionedManyToManyField. # -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import datetime
from django.utils.timezone import utc
import versions.models
import model_utils.fields
import shared.utils
import django_hstore.fields
import django_hstore.virtual
import ckeditor.fields
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('django_hstore', '__first__'),
('webassess', '0002_remove_assessmentquestions'),
]
operations = [
...
migrations.AlterField(
model_name='assessmentbattery',
name='assessments',
field=versions.models.VersionedManyToManyField(to='webassess.Assessment'),
preserve_default=True,
),
...
] If I add a Here is my traceback for reference (similar to above TB, except Python2.7): Traceback (most recent call last):
File "manage.py", line 11, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 288, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/sqlmigrate.py", line 30, in execute
return super(Command, self).execute(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 338, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/sqlmigrate.py", line 61, in handle
sql_statements = executor.collect_sql(plan)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py", line 82, in collect_sql
migration.apply(project_state, schema_editor, collect_sql=True)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/migration.py", line 108, in apply
operation.database_forwards(self.app_label, schema_editor, project_state, new_state)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/operations/fields.py", line 139, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/schema.py", line 460, in alter_field
return self._alter_many_to_many(model, old_field, new_field, strict)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/schema.py", line 764, in _alter_many_to_many
new_field.rel.through._meta.get_field_by_name(new_field.m2m_reverse_field_name())[0],
File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", line 17, in _curried
return _curried_func(*(args + moreargs), **dict(kwargs, **morekwargs))
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.py", line 2224, in _get_m2m_reverse_attr
return getattr(self, cache_attr)
AttributeError: 'VersionedManyToManyField' object has no attribute '_m2m_reverse_name_cache' |
So, I've managed to write a test case that reproduces this issue reliably (see branch |
So far, I've managed to work around the first error that is described above. However, there's more! ;)
It's raised because during a migration, new intermediary classes are created, and, since deepcopied from an already existing intermediary class, are conflicting when their parent class' ( |
I've been pointed to Django's ticket #25154 which was obviously opened by @brandonmoser. Thanks for that, I think the way it's going will be helpful. |
During running an auto-generated migration, I run into
The migration looks like
I'm not 100% sure but I'm fairly certain that the migration was created because I explicitely set the
related_name
attribute, while it was auto-generated before. Do you think there is an easy way to solve this?The text was updated successfully, but these errors were encountered: