South在不同应用程序中遵循哪些迁移顺序?

时间:2011-09-19 17:18:02

标签: python django django-south

我最近开始在我的Django项目中使用South进行迁移。直到最近,当我遇到一个特殊问题时,一切进展顺利。

我的项目中有两个应用程序,比如App-A和App-B。 App-A中的模型具有App-B中模型的外键。当我一直在尝试构建我的系统时,我运行了syndb,它创建了所有auth_south_表。然后我跑了migrate,这引起了错误。当它尝试从App-A创建模型时,App-A引用了App-B中的模型,模型App-B尚未迁移/创建,因此也就是错误。

为了解决这个问题,我必须首先手动迁移App-B,然后再手动迁移App-A。我在这里做错了吗? South如何知道跨应用程序的迁移顺序?

感谢。

2 个答案:

答案 0 :(得分:16)

这解释了它https://south.readthedocs.io/en/latest/dependencies.html

  

应用程序迁移很不错,但是当你开始写一篇文章时   大项目,有很多应用程序,你意识到你有外键   应用程序之间的关系以及确定迁移的顺序   需要应用于每个应用程序只是痛苦。

     

幸运的是,我们也遇到了这个问题,因此南方有一个依赖系统。   在迁移中,您可以声明它依赖于另一个迁移   应用程序首先运行某个迁移;例如,如果我的应用程序   “论坛”取决于创建其用户个人资料的“帐户”应用   表,我们可以做到:

# forum/migrations/0002_post.py class Migration:

    depends_on = (
        ("accounts", "0003_add_user_profile"),
    )

    def forwards(self):
     

然后,如果您尝试迁移到论坛应用中的0002_post或超出0002_post,它将首先确保至少迁移帐户   最多为0003_add_user_profile,如果没有,将为您迁移它。

     

依赖性也相反;南方知道不要撤消这一点   0003_add_user_profile迁移,直到撤消0002_post   迁移。

     

你可以有多个依赖关系,以及各种古怪的结构;   但是,有两条规则:

     

没有循环依赖关系(两次或多次迁移取决于每个   其他)在同一个应用程序中没有向上依赖(所以你不能做   论坛应用中的0002_post依赖于同一应用中的0003_room   直接或通过依赖链。

答案 1 :(得分:12)

South会按照它们在settings.py中的INSTALLED_APPS元组中出现的顺序迁移应用。因此,只需确保App-A在您的settings.py中出现在App-A之前,它应该可以工作:)