Ошибка миграции на юг: исключение NoMigrations для django.contrib.auth - PullRequest
25 голосов
/ 17 мая 2010

Я некоторое время использовал 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 ]

43 голосов
/ 07 июля 2010

Оставьте это здесь для будущих гуглов

Я недавно столкнулся с этим исключением в одном из моих собственных приложений сегодня, а не в контенте.

После небольшого почесывания головы я заметил, что как-то файл ...

 app/migrations/__init__.py

... был удален, что означает, что python не может импортировать каталог как модуль и т. Д. И т. Д.

26 голосов
/ 19 мая 2010

Я решил проблему.

Очевидно, что вы не можете использовать Юг для миграции приложений, которые являются частью Django, например, «auth», поэтому я не знал, почему это пыталось.

Я понял, что какое-то время в моем проекте было другое приложение под названием auth. Должно быть, я пытался перенести это в какой-то момент, прежде чем переименовать, и поэтому все испортил.

Я удалил записи истории миграции из базы данных для этого приложения, и все было в порядке.

11 голосов
/ 08 февраля 2014

Я столкнулся с этим после изменения веток и версий приложений и решил удалить приложение, которое теперь не имело миграций, из таблицы 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)
5 голосов
/ 14 июня 2013

У меня тоже была такая же проблема, и в конце я исправил ее, удалив все строки из таблицы south_migrationhistory и выполнив следующую команду из терминала.

python manage.py reset south

Этот ответ объясняет, как сбросить историю миграции на юг.

Edit:

Начиная с Django 1.5 и далее reset команда не будет работать. Вместо этого вы должны использовать flush.

python manage.py flush

Чтобы узнать больше о том, что будет делать flush, прочитайте этот ответ stackoverflow .

1 голос
/ 05 января 2013

Вы можете выполнять миграцию на встроенных модулях, и это определенно имеет смысл для миграции данных, например, усечения всех имен пользователей, удаления недействительных писем и т. Д.

В случае пользователя из django.contrib.auth.models просто используйте: orm ['auth.User']

1 голос
/ 01 сентября 2012

У меня тоже была такая же проблема, однако это случилось с корневым приложением. Я обнаружил, что это произошло из-за пустого models.py в корне моего проекта от ранней разработки. Я подозреваю, что эта проблема может возникнуть и для проектных приложений.

0 голосов
/ 12 февраля 2014

У меня была похожая проблема с django.contrib.admin, не позволяющим мне выполнять мои миграции. Я решил это, отключив django.contrib.admin в настройках. INSTALLED_APPS

0 голосов
/ 24 января 2014

Я получил ту же ошибку, но не для модуля django, а для модуля, который был частью моего virtualenv. Я не понял, как юг мог выполнить миграцию для этого модуля, так как он действительно не имел миграций. Потом я вспомнил, что скопировал базу данных из тестовой среды, которая должна была быть такой же. Но оказалось, что в другом env была немного другая версия модуля, в которой была миграция. Я закончил тем, что удалил поврежденную строку из истории миграции на юг (так как это был тестовый env).

...