0

我有一个最初为 1.6 版创建的 Django 应用程序,我刚刚完成了最后一个版本的升级。所有的模型都有managed = False,之前没有一个是由南管理的,现在我想开始使用 Django 迁移 1.7 版本。

哪种方法是最好的和无缝的?恐怕只是更改managed = True所有模型并运行manage.py makemigrations会在迁移文件和数据库中造成混乱。

谢谢

编辑

正如建议的那样,我运行了 manage.py makemigrations。它使用一些模型定义创建脚本0001_initial,但不是为模型包中的所有对象创建脚本。它创建了 11 个表,但我有 19 个表。所有型号都有managed = True,我没有任何数据库路由器。

4

2 回答 2

1

大部分取决于代码

该项目根本没有迁移

./manage.py makemigrations
./manage.py migrate

该项目有南迁移:

你可以:

  1. 南迁south_migrations

    或者

  2. 彻底消除南迁

./manage.py makemigrations
./manage.py migrate

如果您选择选项1,您必须记住在两个系统(south 和 django)上保持最新的迁移。仅当您想保持 django <1.7 的兼容性时,这才有用

你有一个可插拔的应用程序

这是最复杂的情​​况,因为您必须保持南方兼容性,并且您必须管理不同版本的南方。这里是如何:

  1. 南迁south_migrations
  2. 运行 ./manage.py makemigrations
  3. 为防止 South 加载错误的迁移,将以下代码放入migration.__init__.py

```

"""
Django migrations

This package does not contain South migrations.  South migrations can be found
in the ``south_migrations`` package.
"""

SOUTH_ERROR_MESSAGE = """\n
For South support, customize the SOUTH_MIGRATION_MODULES setting like so:

SOUTH_MIGRATION_MODULES = {
    'wfp_auth': 'wfp_auth.south_migrations',
}
"""

# Ensure the user is not using Django 1.6 or below with South
try:
    from django.db import migrations  # noqa
except ImportError:
    from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured(SOUTH_ERROR_MESSAGE)

```

于 2014-12-23T09:13:35.567 回答
0

我已经在现有项目上完成了从 1.6 到 1.7 的迁移。这是相当无痛的。

我重命名了旧的 South migrations 文件夹,并让 django 1.7 迁移创建一个新文件夹。(即$mv appname/migrations appname/migrations.south)这将使您更容易以任何理由返回南方,并且不会在您的迁移文件夹中出现混乱。

于 2014-12-23T06:52:44.887 回答