2014-09-03 71 views
15

所以我开始在我的Django Web服务器上遇到南方的一些问题。 迁移命令与该输出每次失败:from django.db导入模型,迁移ImportError:无法导入名称迁移

from django.db import models, migrations 

ImportError: cannot import name migrations 

(高于此错误显示溃败的文件未能迁移)

我的Django的版本是1.5.1,而我的南方版本是0.8.4

最麻烦的事情是模块django.db.migrations无处可查。

任何想法?

+1

你为什么试图从'django.db'中导入'migrations'?此代码位于何处以及如何在代码中使用'migrations'导入? – alecxe 2014-09-03 19:01:06

+1

你想达到什么目的? – Joren 2014-09-03 19:01:54

+0

其实我没有试图导入任何地方的迁移。 该代码位于要迁移的文件上:它是来自rest_framework.authtoken应用程序的代码,正如我上面所解释的,它是我得到的错误消息的一部分。 – Pablo 2014-09-04 15:42:51

回答

20

在Django 1.7中引入了迁移;你正在使用1.5。

这是link to the docs explaining this。如果您使用的是旧版Django,则South是数据迁移最流行的选项。


编辑

所以Django的REST框架导致错误。从他们的文档:

The rest_framework.authtoken app includes both Django native migrations (for Django versions >1.7) and South migrations (for Django versions <1.7) that will create the authtoken table.

Note: From REST Framework v2.4.0 using South with Django <1.7 requires upgrading South v1.0+

您必须upgrade South超出你的0.8.4版本1.0+。

+0

虽然这是事实,但永远不应该导入迁移。 migrations是一个执行的工具(通过'python manage.py makemigrations'和'python manage.py migrate)。这不是一个导入包。 – aliteralmind 2014-09-03 20:04:46

+0

@aliteralmind我完全同意。我并不主张导入迁移:-)也就是说,导入'migrations'不会在Django 1.7中引发错误。 – sgarza62 2014-09-03 20:05:58

+1

我明白这一点。导入不是由我制作的,它包含在我尝试迁移的文件中。这是rest_framework.authtoken代码。 – Pablo 2014-09-04 15:46:50

0

首先,你永远不会输入migrations。它不是一个导入的模块,它是一个执行的命令工具。

其次,移民被介绍给Django的1.7版本,你说你正在使用1.5,所以你将不能够使用它。

在Django 1.7之前,人们曾经与南方合作,因为南方可以让你在数据库中进行迁移。使用Django 1.7,您不再需要南方了,因为迁移已经包含在Django中。换句话说,South在1.7版本中包含在Django中。

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

他们解释,他们包括迁移到Django的。

其实,南方的最后一个版本是1.0版本,他们宣布他们将不会被释放更多的版本,因为他们是在Django的1.7版本的工作,其中南被列入。他们将支持当前版本,但他们不会添加更多功能。

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

他们解释说,1.0是南方的最后一个主要版本,因为它们被Django的1.7迁移工作。

1

我觉得OP没有进口迁移到一个脚本,他正在写,由schemamigration创建的自动脚本之一可能是造成问题的原因。

这个错误突然开始出现在我之前的迁移工作,我发现它不是与Django == 1.6.1和南== 0.8.4的版本,但与我的壳变得困惑至于我正在使用哪个virtualenv。我已经停用了一个虚拟环境并停用了一个虚拟环境,并开始了另一个“workon”并运行schemamigration以更改字段的名称。当我跑./管理迁移时,我得到了错误。我退出了shell并重新开始了virtualenvironment,一切都很好。

相关问题