【问题标题】:Best way to add Django migrations to a django project将 Django 迁移添加到 django 项目的最佳方法
【发布时间】:2015-02-21 05:58:47
【问题描述】:

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

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

谢谢

编辑

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

【问题讨论】:

  • 如果您的数据库与您的模型匹配,那么执行您的建议应该可以正常工作。您预计会遇到哪些问题? (您至少可以尝试makemigrations 而不会受到伤害,因为它所做的只是创建文件,然后您可以将其删除。)

标签: python django django-migrations


【解决方案1】:

大部分取决于代码

项目根本没有迁移

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

项目有南迁:

你可以:

  1. 南迁迁south_migrations

  2. 彻底消除南迁

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

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

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

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

  1. 南迁迁入south_migrations
  2. 运行 ./manage.py makemigrations
  3. 为防止南加载错误的迁移,将以下代码放入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)

```

【讨论】:

  • 感谢@sax。该项目根本没有任何迁移,但它确实有一个可插入的应用程序(REST 框架),但 AFAIK 它没有创建任何模型。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-13
    • 2012-01-13
    • 2011-05-09
    • 1970-01-01
    • 2018-04-16
    • 2011-03-29
    • 2011-03-03
    • 2011-09-30
    相关资源
    最近更新 更多