【问题标题】:Django south circular dependencyDjango南循环依赖
【发布时间】:2013-07-16 16:45:34
【问题描述】:

我在 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

有什么想法吗?

【问题讨论】:

标签: django django-south django-1.5


【解决方案1】:

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

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

【讨论】:

  • 完美!我最终在 MyApp 的第一次迁移中使用了 needed_by,然后在 MyApp 的第二次迁移中使用了 depends_on。这使我可以设置依赖项,而无需修改 AnotherApp(在其他地方开发)
猜你喜欢
  • 2013-01-15
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 2010-10-28
  • 2010-09-12
  • 2021-10-02
  • 1970-01-01
相关资源
最近更新 更多