Python South在不同的应用程序中遵循什么迁移顺序?

Python South在不同的应用程序中遵循什么迁移顺序?,python,django,django-south,Python,Django,Django South,我最近开始在Django项目中使用South进行迁移。一切都很顺利,直到最近我遇到了一个特殊的问题 我的项目中有两个应用程序,比如App-A和App-B。App-A中的一个模型有一个外键指向App-B中的一个模型。当我试图构建我的系统时,我运行了syndb,它创建了所有auth\u和south\u表。然后我运行了migrate,它抛出了错误。当它尝试从App-A创建模型时(该模型引用了App-B中的模型),模型App-B尚未迁移/创建,因此出现错误 为了解决这个问题,我必须先手动迁移App-B,

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

我的项目中有两个应用程序,比如App-A和App-B。App-A中的一个模型有一个外键指向App-B中的一个模型。当我试图构建我的系统时,我运行了
syndb
,它创建了所有
auth\u
south\u
表。然后我运行了
migrate
,它抛出了错误。当它尝试从App-A创建模型时(该模型引用了App-B中的模型),模型App-B尚未迁移/创建,因此出现错误

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


谢谢。

South按照应用程序在settings.py的
INSTALLED_apps
元组中出现的顺序迁移应用程序。所以只要确保在你的settings.py中App-B在App-A之前出现,它就会工作:)

这就解释了

应用程序的迁移很好,但当你开始编写 大型项目,有很多应用程序,你会发现你有外键 应用程序之间的关系以及确定迁移顺序 每个应用程序都需要应用,这很痛苦

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

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

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

    def forwards(self):
然后,如果您尝试迁移到论坛应用程序中的0002_帖子或更高版本,它将首先确保至少迁移了帐户 最多0003_添加_用户_配置文件,如果没有,将为您迁移它

依赖关系也反过来工作;南方知道不能撤销这一点 0003_添加_用户_配置文件迁移,直到撤消0002_帖子 迁移

您可以有多个依赖项和各种古怪的结构; 但是,有两条规则:

无循环依赖项(根据每个循环依赖项进行两次或更多迁移 其他)同一应用程序中没有向上的依赖项(因此您无法 论坛应用程序中的0002_帖子取决于同一应用程序中的0003_房间 直接或通过依赖链


刚刚投票支持这一点,因为这实际上非常重要。
取决于
,而所需的
似乎只控制实际迁移。如果您刚开始迁移,就像我的情况一样,South会在迁移完成后尝试加载应用程序的初始数据。我遇到了应用程序初始数据不可用的问题ing在另一个需要它的应用程序之前可用,并遇到外键问题。我可以通过在
INSTALLED\u apps
中重新排序应用程序来解决此问题。South按照它们在
INSTALLED\u apps
中的顺序运行应用程序,暂停以运行存在的任何迁移依赖项。