不知道为啥 django South 试图运行反向迁移

Posted

技术标签:

【中文标题】不知道为啥 django South 试图运行反向迁移【英文标题】:Not sure why django South is trying to run reverse migration不知道为什么 django South 试图运行反向迁移 【发布时间】:2012-05-04 13:40:48 【问题描述】:

当我运行 python manage.py migrate api 时,它会失败并显示“RuntimeError: Cannot reverse this migration。”

问题是,我不确定它为什么会尝试运行反向迁移?失败的文件是 0025,在 mysql 数据库的 south_migrationhistory 表中没有提及。

知道为什么 South 会尝试使用此命令运行反向迁移吗?

谢谢!

编辑:

完整的堆栈跟踪是:

Running migrations for api:
 - Migrating forwards to 0026_auto.
 > api:0025_auto__chg_field_article_curator_response_comment__chg_field_article_cu
Traceback (most recent call last):
  File "manage.py", line 14, in <module> execute_manager(settings)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 459, in execute_manager utility.execute()
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 382, in execute self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/django/core/management/base.py", line 196, in run_from_argv self.execute(*args, **options.__dict__)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/django/core/management/base.py", line 232, in execute output = self.handle(*args, **options)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/management/commands/migrate.py", line 105, in handle ignore_ghosts = ignore_ghosts,
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/__init__.py", line 191, in migrate_app success = migrator.migrate_many(target, workplan, database)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 221, in migrate_many result = migrator.__class__.migrate_many(migrator, target, migrations, database)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 292, in migrate_many result = self.migrate(migration, database)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 125, in migrate result = self.run(migration)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 99, in run return self.run_migration(migration)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 86, in run_migration print self.run_migration_error(migration)
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 286, in run_migration_error (self.format_backwards(migration), extra_info))
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 273, in format_backwards self.backwards(migration)()
  File "/home/ubuntu/fake-env/local/lib/python2.7/site-packages/south/migration/migrators.py", line 57, in <lambda> return (lambda: direction(orm))
  File "/home/ubuntu/fakeapi/fakeapi/../fakeapi/api/migrations/0025_auto__chg_field_article_curator_response_comment__chg_field_article_cu.py", line 42, in backwards raise RuntimeError("Cannot reverse this migration. 'Image.article' and its values cannot be restored.")
RuntimeError: Cannot reverse this migration. 'Image.article' and its values cannot be restored.

【问题讨论】:

这是您得到的唯一错误,还是有更多细节?您可能遇到了一个错误,然后它尝试回滚 - 但您只看到回滚错误。 我很确定这是唯一相关的信息,我添加了完整的堆栈跟踪以防万一 我相信它正在检查以验证是否可以逆转迁移。并且由于不可能引发错误。如果您错过了迁移,那将阻止反向迁移。只是一个想法。 @mtnpaul,错过迁移是什么意思? 【参考方案1】:

遇到迁移错误,并尝试回滚。您可以暂时清理向后迁移,看看真正的错误是什么。

【讨论】:

谢谢@ilvar,你能解释一下如何清理向后迁移吗?我在网上找不到任何信息 只需注释掉backwards方法中的所有代码,并添加一个pass代替 谢谢 ilvar,遇到了同样的问题。

以上是关于不知道为啥 django South 试图运行反向迁移的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Django South 1.0 使用 iteritems()?

运行单元测试时禁用 Django South?

在 Django 1.7 迁移之前运行 South 迁移的推荐方法是啥?

从 South 迁移到 Django 1.7 迁移:可交换依赖项

Django-South DataMigration - 应用程序在 forwards() 中可用,但在 backs() 中不可用?

无法在 Django 1.7 中创建 South 数据库模型