首页 文章

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

提问于
浏览
0

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

这将是最好和无缝的方式吗?我担心只是在所有模型中更改 managed = True 并运行 manage.py makemigrations 会使迁移文件和数据库混乱 .

谢谢

EDIT

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

2 回答

  • 1

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

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

  • 0

    大多数取决于代码

    项目根本没有迁移

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

    该项目有南迁移:

    您可以:

    • south_migrations 移动南迁

    要么

    • 完全消除了南迁

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

    如果你选择 1 ,你必须记住继续使用两个系统(南和django)进行迁移 . 仅当您想保持django <1.7兼容性时,这才有用

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

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

    • south_migrations 移动南迁

    • 运行./manage.py makemigrations

    • 防止南方加载错误的migratins将以下代码放入 migration.__init__.py

    
    ```java
    """
    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)
    

相关问题