我有一个最初为1.6版本创建的Django应用程序,我刚刚完成了上一版本的升级。所有模型都有managed = False
,之前没有一个是南方管理的,现在我想开始使用1.7版本的Django迁移。
哪种方式最好,最无缝?我担心只是在所有模型中更改managed = True
并运行manage.py makemigrations
都会在迁移文件和数据库中造成混乱。
由于
修改
正如我所说,我运行了manage.py makemigrations。它使用一些模型定义创建了脚本0001_initial
,但没有为模型包中的所有对象创建。它创建了11个表,但我有19个表。所有型号都有managed = True
,我没有任何数据库路由器。
答案 0 :(得分:1)
大多数取决于代码
./manage.py makemigrations
./manage.py migrate
在south_migrations
或
完全删除南迁移
和
./manage.py makemigrations
./manage.py migrate
如果您选择1
选项,则必须记住要继续使用这两个系统(南方和django)迁移。仅当您想要保持django< 1.7兼容性
这是最复杂的情况,因为你必须保持南方的兼容性,你必须管理不同版本的南方。这里是如何:
south_migrations
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)
```
答案 1 :(得分:0)
我在现有项目上完成了从1.6到1.7的迁移。这是相当无痛的。
我重命名了旧的South migrations文件夹,让django 1.7迁移创建一个新文件夹。 (即$ mv appname / migrations appname / migrations.south)这样可以更容易回到南方,无论出于何种原因,都可以避免在迁移文件夹中混乱使用。