【发布时间】:2016-04-14 10:08:37
【问题描述】:
我正在尝试为我的 Django 项目运行迁移,但出现错误:
AttributeError: 'ManyToManyField' object has no attribute 'm2m_reverse_field_name'
当我在所有应用程序上运行 make migrations 时,我没有收到任何错误。只有当我尝试实际迁移时。我无法从回溯信息中分辨出哪个模型造成了问题,甚至无法分辨出哪个应用程序。我查看了我的模型,但没有看到任何突然出现的东西。
这是堆栈跟踪:
Operations to perform:
Apply all migrations: admin, sessions, case_manager, file_manager, auth, contenttypes, tasks, people_and_property
Running migrations:
Rendering model states... DONE
Applying file_manager.0006_auto_20160109_1536...Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/mint/Python_Projects/venv/lib/python3.4/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line
utility.execute()
File "/home/mint/Python_Projects/venv/lib/python3.4/site-packages/django/core/management/__init__.py", line 342, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/mint/Python_Projects/venv/lib/python3.4/site-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/mint/Python_Projects/venv/lib/python3.4/site-packages/django/core/management/base.py", line 399, in execute
output = self.handle(*args, **options)
File "/home/mint/Python_Projects/venv/lib/python3.4/site-packages/django/core/management/commands/migrate.py", line 200, in handle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "/home/mint/Python_Projects/venv/lib/python3.4/site-packages/django/db/migrations/executor.py", line 92, in migrate
self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/home/mint/Python_Projects/venv/lib/python3.4/site-packages/django/db/migrations/executor.py", line 121, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "/home/mint/Python_Projects/venv/lib/python3.4/site-packages/django/db/migrations/executor.py", line 198, in apply_migration
state = migration.apply(state, schema_editor)
File "/home/mint/Python_Projects/venv/lib/python3.4/site-packages/django/db/migrations/migration.py", line 123, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/home/mint/Python_Projects/venv/lib/python3.4/site-packages/django/db/migrations/operations/fields.py", line 201, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File "/home/mint/Python_Projects/venv/lib/python3.4/site-packages/django/db/backends/base/schema.py", line 467, in alter_field
return self._alter_many_to_many(model, old_field, new_field, strict)
File "/home/mint/Python_Projects/venv/lib/python3.4/site-packages/django/db/backends/sqlite3/schema.py", line 274, in _alter_many_to_many
old_field.remote_field.through._meta.get_field(old_field.m2m_reverse_field_name()),
AttributeError: 'ManyToManyField' object has no attribute 'm2m_reverse_field_name'
如何找出问题所在?我应该寻找什么?
【问题讨论】:
-
您在更改某些模型后出现此错误?
-
我做了一些小改动。我实际上试图回去并将它们更改为原来的样子,但这似乎并没有什么不同。我没有做任何花哨的事情,实际上只是带有相关名称的多对多字段。
-
你能显示完整的字段定义吗?
-
我认为发生的事情是我有两个模型,它们都具有指向对方的多字段。所以 Note 模型有一个 related_cases manytomany 字段指向 Case 模型,而 Case 模型有一个 related_notes 字段指向 Note 模型。我删除了许多字段之一,删除了迁移文件,重新运行 makemigrations,然后运行 migrate 没有错误。
标签: django django-models django-orm