如何使用Django South与从egg加载的第三方应用程序?

时间:2012-01-02 09:31:19

标签: django database-migration django-south

我正在使用Easy Install / Pip .egg文件中的Django Activity Stream第三方应用。这个特定的应用程序要求在我的项目的其余部分进行更改时不断更改和更新表,并且因为我需要在新模型上使用额外的流。

如果我想使用South来帮助我跟踪和更新这些更改,我有哪些选择?是将外部app目录复制到我的项目目录中的唯一选项,从而使我的不同Django项目的维护稍微困难一些吗?我找到了this related question,但这并不能解决从egg开始运行的情况。

简单地说,我需要的只是南方在我指定的项目中使用单独的migrations目录。这可能与南方有关吗?

更新

好吧,我以为我在settings.py中做了这个答案:

SOUTH_MIGRATION_MODULES = {
    'books': 'myproject.app_name.migrations',
}

但现在南方抱怨

  

为actstream指定的迁移模块'myproject.app_name.migrations'无效;父模块不存在。

我在项目中为应用创建了一个空文件夹,以及__init__.py,但这没有任何区别。我做错了什么?

1 个答案:

答案 0 :(得分:4)

答案最终是在settings.py中执行此操作:

SOUTH_MIGRATION_MODULES = {
    'books': 'myproject.app_name.migrations',
}

但是,由于我使用site.addsitedir(path('apps'))将我的应用所在的目录添加到python路径,因此我不需要myproject部分。但是,当然,只要您删除myproject部分,South再次使用应用程序的鸡蛋安装版本。因此,我的解决方案只是在我的项目中创建一个名为migrations的新目录(请记住__init__.py),然后像这样更改settings.py

SOUTH_MIGRATION_MODULES = {
    'books': 'myproject.migrations.app_name.migrations',
}

迁移目录现在可以保留任何第三方应用程序迁移。