Django Migrations从1.5版本到1.7版本

时间:2014-11-05 03:32:38

标签: python django django-1.7

我在版本 1.5 中有一个现有的Django项目,现在我已将其升级到新的 Django 1.7

我主要担心的是移民问题。

我采取了以下步骤将我的项目转换为Django 1.7。

  1. 将旧的南方迁移移至south_migrations文件夹
  2. 删除"南"来自已安装的应用
  3. ./manage.py makemigrations
  4. ./manage.py migrate
  5. 这是正确的方法吗?

    我有另一个问题。当我运行./manage.py runserver时,它会发出如下警告:

      

    提示:Django 1.6将BooleanField的默认值从False更改为None。看到   https://docs.djangoproject.com/en/1.6/ref/models/fields/#booleanfield了解更多信息。   sqls.Sql.updates:(1_6.W002)BooleanField没有默认值。

    我该如何解决这个问题?我只为BooleanField添加了默认值,然后运行makemigrationsmigrate。这还够,还是我需要做更多的事情?

1 个答案:

答案 0 :(得分:3)

我主要关心的是迁移。这是正确的做法吗?

是。如果您的所有部署都是最新的(即没有尚未应用的南迁移),您只需删除South迁移并从INSTALLED_APPS中删除South。从Django的角度来看,您正在使用现有的应用程序并将其转换为使用迁移,这是the documentation中描述的直接案例:

  

如果您的应用已经有模型和数据库表,并且还没有迁移(例如,您是根据以前的Django版本创建的),则需要将其转换为使用迁移;这是一个简单的过程:

     

$ python manage.py makemigrations your_app_label

     

这将为您的应用进行新的初始迁移。现在,当您运行迁移时,Django将检测到您有初始迁移,并且它想要创建的表已经存在,并将迁移标记为已应用。

如何修复这些BooleanField警告?

(请注意,自Django 1.8起,此警告不再存在。)

这些警告指的是Django中的向后不兼容的更改,可能会影响您。但它可能没有。如果您的代码未指定BooleanField的默认值,但仍希望它使用默认值False,则只会影响您。您应该查看所有应用中的所有BooleanFields,并确定是否一直如此。

如果没有,您可以使用SILENCED_SYSTEM_CHECKS设置暂停警告。

如果您的代码确实依赖于此隐式默认值,那么转换应用程序以使用迁移之后,您应该明确添加default=False并创建迁移。 (当然,无论如何你都可以这样做,但如果你实际上不需要使用默认值,最好不要定义默认值。)