2014-11-05 144 views
4

我有一个现有的Django项目版本1.5,现在我已经升级到新的Django 1.7Django从1.5版本迁移到1.7

我主要关心的是迁移。

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

  1. 移动的旧南迁移到south_migrations文件夹
  2. 删除 “南”,从安装的应用程序
  3. ./manage.py makemigrations
  4. ./manage.py migrate

这是正确的做法?

我有另一个问题。当我运行./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。这足够了还是我需要做更多的事情?

回答

3

我主要关心的是移植。这是正确的方法吗?

是的。如果您的所有部署都是最新的(也就是说,没有南迁移没有应用),那么您可以简单地删除南迁移并从INSTALLED_APPS中删除南迁。从Django的角度来看,你正在服用的现有应用并将其转变成使用迁移,一个简单的情况下,the documentation描述:

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

$蟒蛇manage.py makemigrations your_app_label

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

如何解决这些BooleanField警告?

(请注意,此警告不再作为Django的1.8。)

这些警告是指在Django一个向后兼容的变化是可能影响你。但它可能不会。如果你的代码没有指定BooleanField的默认值,但它仍然会使用默认值False。您应该查看所有应用中的所有BooleanFields,然后决定是否有这种情况。

如果不是,您可以使用SILENCED_SYSTEM_CHECKS设置简单地使警告消失。

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

+0

这个检查已经在开发分支中删除了:https:// code.djangoproject.com/ticket/23765。 – 2015-03-23 08:48:30