2013-05-14 4 views
3

Благодаря объединения нескольких ветвей функций в моем проекте, у меня есть следующие: миграцииВосстановление дубликата миграции в Джанго Южной

0001_initial.py 
0002_auto__add_field_userprofile_telephone__add_field_userprofile_timezone.py 
0003_auto.py 
0004_auto__del_field_organisation_admin.py 
0005_auto__add_field_organisation_permitted_domains.py 
0005_auto__add_field_userprofile_currency.py 

Обратите внимание, что у меня есть два дублирующих 0005 миграции. Они отлично работали, и на моей производственной системе было отлично реализовано.

$ python manage.py migrate accounts --list                                        [17:11:42] 

accounts 
    (*) 0001_initial 
    (*) 0002_auto__add_field_userprofile_telephone__add_field_userprofile_timezone 
    (*) 0003_auto 
    (*) 0004_auto__del_field_organisation_admin 
    (*) 0005_auto__add_field_organisation_permitted_domains 
    (*) 0005_auto__add_field_userprofile_currency 

Моя таблица имеет правильные столбцы:

$ psql 
db_my_project=# \d+ accounts_organisation 
db_my_project=# \d+ accounts_userprofile 
... shows currency and permitted_domain, suggesting the migrations worked correctly 

Однако, если я пытаюсь создать новую миграцию, South думает, что я не добавил столбец»permitted_domains' в моей модели:

$ python manage.py schemamigration accounts --auto                                      [17:16:15] 
+ Added field permitted_domains on accounts.Organisation 
Created 0006_auto__add_field_organisation_permitted_domains.py. You can now apply this migration with: ./manage.py migrate accounts 

Как исправить это?

ответ

3

Из документов: http://south.readthedocs.org/en/0.7.6/autodetector.html

При запуске autodetector, он сравнивает текущие модели с теми заморожено в вашей последней миграции на приложение, и если он находит любые изменения, дает один или несколько Действия на юге mig-file-writer.

Миграции сохраняют замороженную версию полей внутри модели в dict.

Поэтому:

В 0005_auto__add_field_organisation_permitted_domains класс Организация будет иметь поле permitted_domains но в 0005_auto__add_field_userprofile_currency не будет. При запуске:

$ python manage.py schemamigrate accounts --auto 

это будет сравнивать текущее состояние кода с записью магазина полей в 0005_auto_add_field_userprofile_currency, что приводит к югу, чтобы добавить поле во второй раз.

Если вы скопировали строку в поле «allowed_domains» с 0005_auto__add_field_organisation_permitted_domains до 0005_auto__add_field_userprofile_currency, это решит вашу проблему.

+0

Для других ссылок на это: не забудьте удалить свернутую миграцию (т.'0005_auto__add_field_organisation_permitted_domains' в этом случае) из таблицы' south_migrationhistory', иначе вы получите эту ошибку при запуске 'migrate ': 'Я не доверяю себе; либо исправьте это сами, переиграв таблицу south_migrationhistory, либо передайте -delete-ghost-migration на Юг, чтобы удалить все эти записи (это может быть не очень хорошо). – 3cheesewheel

2

Это очень специфическая проблема, я надеюсь, что это помогает, сделайте следующее:

1) Переименовать этот файл: 0005_auto__add_field_organisation_permitted_domains в 0006_auto__add_field_organisation_permitted_domains

2) Rename номер вашего недавно миграции файла с 0006 по 0007

3) Выдать команду python manage.py migrate account 0006 --fake, чтобы обмануть на юг.

4) Выполните команду python manage.py migrate account 0007

Это может получить южный двигатель sycn снова с приложением

Надежда это помогает!