8

我在 Django 1.5 项目中有一个应用程序(我们称之为 MyApp)。MyApp 定义了一个自定义用户模型 (MyUser)。该项目使用另一个引用 MyUser 的应用程序 (AnotherApp)。MyApp 引用 AnotherApp 中的字段。

在我的开发笔记本电脑上一切正常。我正在尝试在服务器上部署我的项目,当我进入迁移步骤时,MyApp 由于对 AnotherApp 的依赖而失败,而 AnotherApp 由于对 MyApp 的依赖而失败(我曾尝试独立迁移应用程序)。两者都在各自的第一次迁移中失败 (0001)

Running migrations for myapp:
 - Migrating forwards to 0017_auto__blah_blah.
 > myapp:0001_initial
FATAL ERROR - The following SQL query failed: ALTER TABLE "myapp_mymodel_othermodel" ADD CONSTRAINT "othermodel_id_refs_id_ae052c6d" FOREIGN KEY ("othermodel_id") REFERENCES "anotherapp_othermodel" ("id") DEFERRABLE INITIALLY DEFERRED;
The error was: relation "anotherapp_othermodel" does not exist

Error in migration: myapp:0001_initial
DatabaseError: relation "anotherapp_othermodel" does not exist


Running migrations for anotherapp:
 - Migrating forwards to 0008_blah_blah.
 > anotherapp:0001_initial
FATAL ERROR - The following SQL query failed: ALTER TABLE "anotherapp_othermodel" ADD CONSTRAINT "creator_id_refs_id_cff6fecf" FOREIGN KEY ("creator_id") REFERENCES "myuser" ("id") DEFERRABLE INITIALLY DEFERRED;
The error was: relation "myuser" does not exist

Error in migration: anotherapp:0001_initial
DatabaseError: relation "myuser" does not exist

有任何想法吗?

4

1 回答 1

11

这里似乎存在真正的循环依赖。不过,您可以很容易地打破它:将 MyApp 中 m2m 表的创建移动到单独的迁移中。最简单的方法可能是将 0001_initial.py 复制到一个新名称,然后删除原始 m2m 表的块(向前和向后!),并删除副本中的所有其他内容。

副本的命名应使其在 0001_initial 和 0002_whatever 之间排序——比如 0001_initial2.py;并且它应该依赖于 ("AnotherApp", "0001_initial")——而后者又应该依赖于 ("MyApp", "0001_initial")。

于 2013-07-17T23:13:18.680 回答