从django.db导入models、migrations时出现ImportError:无法导入migrations

16 投票
3 回答
12293 浏览
提问于 2025-04-19 15:55

我在我的Django网页服务器上开始遇到一些问题。每次运行迁移命令时,都会出现以下错误:

from django.db import models, migrations

ImportError: cannot import name migrations 

(在这个错误信息的上面,会显示出无法迁移的文件路径)

我的Django版本是1.5.1,而我的south版本是0.8.4。

让我最困扰的是,我找不到django.db.migrations这个模块。

有没有什么建议?

3 个回答

0

首先,你永远不需要导入 migrations。它不是一个需要导入的模块,而是一个可以执行的命令工具。

其次,迁移功能是在Django 1.7版本中引入的,而你说你在使用1.5版本,所以你无法使用这个功能。

在Django 1.7之前,人们使用South这个工具,因为它可以让你在数据库中进行迁移。到了Django 1.7,你就不需要South了,因为迁移功能已经包含在Django里面了。换句话说,South在Django 1.7版本中被整合进来了。

你可以看看这个链接: https://docs.djangoproject.com/en/1.7/topics/migrations/

他们在这里解释了迁移功能是如何被加入到Django中的。

实际上,South的最后一个版本是1.0,他们宣布不会再发布新版本,因为他们正在开发Django 1.7版本,而South的功能已经被包含在里面了。他们会支持当前版本,但不会再添加新功能。

你可以看看这个链接: http://south.readthedocs.org/en/latest/releasenotes/1.0.html

他们在这里解释了1.0是South的最后一个主要版本,因为他们正在开发Django 1.7的迁移功能。

1

我觉得提问者在写脚本的时候没有导入迁移文件,可能是自动生成的某个脚本导致了问题。

这个错误突然出现在我之前迁移正常的情况下,我发现这和我使用的Django版本1.6.1和South版本0.8.4没有关系,而是因为我的命令行搞混了我正在使用哪个虚拟环境。我先用deactivate退出了一个虚拟环境,然后用"workon"启动了另一个虚拟环境,接着运行了一个迁移命令来改字段名。当我执行./manage migrate时,就出现了错误。我退出了命令行,再重新启动虚拟环境,一切就正常了。

21

迁移功能是在Django 1.7版本中引入的;而你现在使用的是1.5版本。

这里有一个链接到文档,解释了这个问题。如果你在使用较旧版本的Django,South是进行数据迁移的最流行选择。


编辑

所以是Django Rest Framework导致了这个错误。根据他们的文档:

rest_framework.authtoken应用包含了Django原生的迁移(适用于Django版本大于1.7)和South的迁移(适用于Django版本小于1.7),这些迁移会创建authtoken表。

注意:从REST Framework v2.4.0开始,使用South与Django小于1.7的版本需要将South升级到1.0以上

你必须将South升级到超过0.8.4的版本,至少要到1.0以上。

撰写回答