将Django迁移添加到django项目的最佳方法

时间:2014-12-23 05:21:01

标签: python django django-migrations

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

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

由于

修改

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

2 个答案:

答案 0 :(得分:1)

大多数取决于代码

该项目根本没有迁移

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

该项目有南迁移:

你可以:

  1. south_migrations

    中移动南迁移

  2. 完全删除南迁移

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

    如果您选择1选项,则必须记住要继续使用这两个系统(南方和django)迁移。仅当您想要保持django< 1.7兼容性

    时,这才有用

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

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

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

      """
      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)这样可以更容易回到南方,无论出于何种原因,都可以避免在迁移文件夹中混乱使用。