2010-05-16 81 views
24

我在我的项目中一直在使用South,但是我最近做了大量的开发工作,并且改变了开发机器,我觉得在这个过程中出现了一些问题。该项目工作正常,但我不能申请迁移。每当我试图应用迁移我得到以下回溯:South迁移错误:django.contrib.auth的NoMigrations例外

danpalmer:pest Dan$ python manage.py migrate frontend 
Traceback (most recent call last): 
    File "manage.py", line 11, in <module> 
    execute_manager(settings) 
    File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 362, in execute_manager 
    utility.execute() 
    File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 303, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 195, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 222, in execute 
    output = self.handle(*args, **options) 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/management/commands/migrate.py", line 102, in handle 
    delete_ghosts = delete_ghosts, 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/__init__.py", line 182, in migrate_app 
    applied = check_migration_histories(applied, delete_ghosts) 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/__init__.py", line 85, in check_migration_histories 
    m = h.get_migration() 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/models.py", line 34, in get_migration 
    return self.get_migrations().migration(self.migration) 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/models.py", line 31, in get_migrations 
    return Migrations(self.app_name) 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/base.py", line 60, in __call__ 
    self.instances[app_label] = super(MigrationsMetaclass, self).__call__(app_label_to_app_module(app_label), **kwds) 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/base.py", line 88, in __init__ 
    self.set_application(application, force_creation, verbose_creation) 
    File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/base.py", line 159, in set_application 
    raise exceptions.NoMigrations(application) 
south.exceptions.NoMigrations: Application '<module 'django.contrib.auth' from '/Library/Python/2.6/site-packages/django/contrib/auth/__init__.pyc'>' has no migrations. 

我不与南非有经验,我还没有见过这个错误。我可以在网上找到关于这个错误的唯一有用的提及,就是在0.7之前,我认为我在南部0.7。我运行'easy_install -U South'来确保。

+0

您是否先syncDB以确保southmigrationhistory表在那里?或者当你移动机器时导入数据库转储? – 2010-05-16 22:40:13

+0

此外,django.contrib.auth不应该使用迁移(除非你正在做一些手段来破解它)。您是否为contrib.auth手动创建迁移目录? – 2010-05-16 23:04:45

+0

我做了一个syncdb开始。该数据库是相同的数据库,因为我只是使用SQLite数据库进行开发。关于第二点,请参阅下面的解决方案。 – danpalmer 2010-05-19 07:50:43

回答

26

我解决了这个问题。

显然,您不能使用South为Django的应用程序进行迁移,如'auth',因此我不知道它为什么要尝试迁移。

我意识到,有一段时间,我的项目中有另一个应用程序称为auth。我必须尝试在重命名之前在某个时刻将其迁移,并因此将其全部搞砸。

我从该应用程序的数据库中删除了迁移历史条目,一切都很好。

+0

我有同样的问题,但与评论应用程序。谢谢。 – zerofuxor 2011-04-27 19:05:12

+0

就像今天的消息应用程序一样。 – Jyrsa 2012-10-30 08:56:17

+1

你可以使用South作为认证的Django一部分的应用程序,它有时候是有道理的。请参阅下面的答案。我不确定当接受的答案不正确时该怎么办,也许您可​​以编辑您的答案以包含我的正确答案? – mrooney 2013-05-24 16:49:04

43

离开这里这为未来的Google

最近我今天就遇到了这个例外有我自己的应用程序之一,而不是一个一个的contrib。

后有点头刮的,我注意到,不知怎的,文件...

app/migrations/__init__.py 

...已被删除,这意味着蟒蛇不能导入目录作为一个模块等等等等

+2

是的。像魅力一样工作。 – mlissner 2011-03-27 05:49:04

+2

谢谢,它也帮助我。 – akozin 2014-02-10 10:29:22

+2

对我而言,注册迁移到数据库和删除“迁移”目录之间是一种不连贯的状态。添加一个'migrations'及其'__init __。py'解决了这个问题。 – gipi 2014-10-16 10:22:28

1

我也有同样的问题,但是这发生在根应用程序。我发现这是由于我早期开发的项目根目录中空的models.py。我怀疑这个问题也可能出现在项目应用程序中。

1

您可以在内置模块上进行迁移,它对数据迁移非常有用,例如截断所有用户名,删除无效的电子邮件等。

在从django.contrib.auth.models用户的情况下,简单地使用:ORM [“auth.User”]

5

我也有同样的问题,并在结束我删去这个固定来自south_migrationhistory表的所有行并从终端运行以下命令。

python manage.py reset south 

这个answer解释了如何重置南迁移历史。

编辑:

从Django的1.5起reset命令将不起作用。相反,您必须使用flush

python manage.py flush 

要了解更多关于什么flush将读取此stackoverflow answer

+1

请注意,在Django 1.5中,“reset”命令被替换为“flush”,尽管flush不适用于单独的表。为此,您需要使用旧复位的这个端口:https://github.com/gregmuellegger/django-reset – shacker 2013-08-26 20:51:07

0

我得到了同样的错误,但不是为一个Django模块,而是一个模块,这是我的virtualenv的一部分。我没有看到南方可以如何为该模块进行迁移,因为它实际上没有任何迁移。然后我记得我从一个应该是相同的测试环境中复制数据库。但事实证明,其他env有一个稍微不同的模块版本,确实有迁移。 我最终删除了南迁移史上的违规行(因为它无论如何都是测试env)。

10

我只是碰到了这个交换台分支机构和应用版本后,决定删除的应用程序,现在没有迁移从south_migrationhistory表

./manage.py dbshell 

mysql> SELECT * FROM south_migrationhistory WHERE app_name = 'social_auth'; 

104 | social_auth | 0001_initial...                 
105 | social_auth | 0002_auto__add_unique_nonce... 


mysql> DELETE FROM south_migrationhistory WHERE app_name = 'social_auth'; 
Query OK, 2 rows affected (0.00 sec) 
+0

这也是一个快速修复,当您只想删除单个应用程序迁移而不是重置/向南冲洗。 – andyzinsser 2014-06-11 19:06:33

+0

真棒这解决了我的问题,虽然我不是OP赫赫欢呼 – NeoVe 2015-05-17 00:39:48

0

我有django.contrib.admin类似的问题不让我运行我的迁移。我通过在设置中禁用django.contrib.admin来解决它.INSTALLED_APPS