Django从1.5版本迁移到1.7

4 投票
1 回答
2097 浏览
提问于 2025-05-01 17:21

我有一个现有的Django项目,版本是1.5,现在我把它升级到了新的Django 1.7

我最关心的是迁移的问题。

为了把我的项目转换到Django 1.7,我采取了以下步骤:

  1. 把旧的South迁移文件移到了一个叫south_migrations的文件夹里
  2. 从已安装的应用中删除了"南方"(south)
  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。这样就够了吗,还是我还需要做其他事情?

暂无标签

1 个回答

3

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

没错。如果你所有的部署都是最新的(也就是说,没有未应用的 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 并创建一个迁移。(当然,你可以在任何地方都这样做,但如果你不需要使用默认值,最好还是不要定义它。)

撰写回答