南迁移错误:django.contrib.auth的NoMigrations异常

时间:2010-05-16 22:15:44

标签: database django migration django-south

我一直在我的项目上使用South一段时间,但我最近做了大量的开发并改变了开发机器,我认为在这个过程中有些混乱。该项目工作正常,但我无法应用迁移。每当我尝试应用迁移时,我都会得到以下回溯:

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'只是为了确保。

8 个答案:

答案 0 :(得分:43)

将此留给未来的googlers

我最近使用我自己的应用程序遇到了这个例外,而不是贡献者。

经过一番搔痒之后,我注意到文件......

 app/migrations/__init__.py

...已被删除,这意味着python无法将dir导入为模块等等。

答案 1 :(得分:26)

我解决了这个问题。

显然,您不能使用South为Django中的应用程序进行迁移,例如'auth',所以我不知道为什么要这样做。

我意识到有一段时间我在我的项目中有另一个名为auth的应用程序。我必须在重命名它之前尝试迁移它,因此搞砸了所有这些。

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

答案 2 :(得分:11)

我在切换分支机构和应用程序版本后遇到了这个问题,并决定删除现在没有从南__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)

答案 3 :(得分:5)

我也有同样的问题,最后我通过删除south_migrationhistory表中的所有行来修复此问题,并从终端运行以下命令。

python manage.py reset south

answer解释了如何重置南迁移历史记录。

修改

从Django 1.5开始reset命令将无效。相反,您必须使用flush

python manage.py flush

要了解更多关于英特尔会做什么的信息,请阅读stackoverflow answer

答案 4 :(得分:1)

我也遇到了同样的问题,但这种情况发生在root应用程序中。我发现这是因为早期开发项目根目录中的空models.py。我怀疑项目应用程序也可能出现这个问题。

答案 5 :(得分:1)

您可以对内置模块进行迁移,这对于数据迁移绝对有意义,例如,截断所有用户名,删除无效的电子邮件等等。

对于来自django.contrib.auth.models的用户,只需使用:orm ['auth.User']

答案 6 :(得分:0)

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

答案 7 :(得分:0)

我遇到类似的问题,django.contrib.admin不允许我运行我的迁移。我通过在settings.INSTALLED_APPS

中禁用django.contrib.admin来解决它