Django从1.5版本迁移到1.7
我有一个现有的Django项目,版本是1.5,现在我把它升级到了新的Django 1.7。
我最关心的是迁移的问题。
为了把我的项目转换到Django 1.7,我采取了以下步骤:
- 把旧的South迁移文件移到了一个叫
south_migrations
的文件夹里 - 从已安装的应用中删除了"南方"(south)
- 运行了
./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
。这样就够了吗,还是我还需要做其他事情?
1 个回答
我主要担心的是迁移。这种做法正确吗?
没错。如果你所有的部署都是最新的(也就是说,没有未应用的 South 迁移),你可以直接删除 South 迁移,并把 South 从 INSTALLED_APPS
中移除。从 Django 的角度来看,你是在把一个已有的应用转换为使用迁移,这个过程很简单,文档中有详细说明,链接在这里:文档:
如果你的应用已经有模型和数据库表,但还没有迁移(比如,你是在之前的 Django 版本下创建的),你需要把它转换为使用迁移;这个过程很简单:
$ python manage.py makemigrations your_app_label
这条命令会为你的应用创建一个新的初始迁移。现在,当你运行迁移时,Django 会检测到你有一个初始迁移,并且它想要创建的表已经存在,因此会把这个迁移标记为已应用。
我该如何解决这些 BooleanField
警告?
(注意,从 Django 1.8 开始,这个警告就不存在了。)
这些警告是指 Django 中一个不兼容的变化,可能会影响到你。但实际上可能不会影响到你。只有在你的代码没有为 BooleanField
指定默认值,但仍然希望它使用默认值 False
的情况下,才会受到影响。你应该检查一下你所有应用中的 BooleanField
,看看是否有这种情况。
如果没有,你可以通过使用 SILENCED_SYSTEM_CHECKS
设置来消除这个警告。
如果你的代码确实依赖于这个隐含的默认值,那么在把应用转换为使用迁移之后,你应该明确地添加 default=False
并创建一个迁移。(当然,你可以在任何地方都这样做,但如果你不需要使用默认值,最好还是不要定义它。)