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

Mri*_*lla 8 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如何知道跨应用程序的迁移顺序?

谢谢.

Mri*_*lla 16

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

对于应用程序迁移是好的"n的所有,但是当你开始写一个大的项目,有很多的应用程序,你会意识到你有应用程序之间的外键关系工作的无序迁移将需要为每个应用程序应用什么是公正的痛苦.

幸运的是,我们也有这个问题,所以南方有一个依赖系统.在迁移过程中,您可以声明它依赖于让另一个应用程序先运行某个迁移; 例如,如果我的应用程序"论坛"依赖于已创建其用户配置文件表的"帐户"应用程序,我们可以执行以下操作:

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

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

    def forwards(self):
Run Code Online (Sandbox Code Playgroud)

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

依赖性也相反; South知道不撤消0003_add_user_profile迁移,直到撤消0002_post迁移为止.

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

没有循环依赖于相同的应用程序没有向上依赖(视对方两个或两个以上的迁移)(所以你不能让0002_post在论坛上的应用程序依赖于0003_room在相同的应用程序,无论是直接或通过依赖链.


小智 12

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