我在版本 1.5 中有一个现有的Django项目,现在我已将其升级到新的 Django 1.7 。
我主要担心的是移民问题。
我采取了以下步骤将我的项目转换为Django 1.7。
south_migrations
文件夹./manage.py makemigrations
./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
添加了默认值,然后运行makemigrations
和migrate
。这还够,还是我需要做更多的事情?
答案 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
并创建迁移。 (当然,无论如何你都可以这样做,但如果你实际上不需要使用默认值,最好不要定义默认值。)