2015-08-22 2 views
1

У меня есть проект, работающий на django 1.6 и работающий над его обновлением до 1.8, который включает перемещение с юга на миграцию django.Миграция с юга на django 1.8 raises table уже существует

Я пытался следовать инструкциям из Джанго документации о том, как обновить с юга Джанго миграции здесь https://docs.djangoproject.com/en/1.8/topics/migrations/#upgrading-from-south

& я столкнулся с проблемой при попытке перенести --initial-подделка, похоже, даже если некоторые таблицы существует django migration пытается их создать

./manage.py migrate --fake-initial 


Running migrations: 
    Rendering model states... DONE 
    Applying retail.0001_initial... FAKED 
    Applying contenttypes.0001_initial... FAKED 
    Applying contenttypes.0002_remove_content_type_name... OK 
    Applying auth.0001_initial... FAKED 
    Applying auth.0002_alter_permission_name_max_length... OK 
    Applying auth.0003_alter_user_email_max_length... OK 
    Applying auth.0004_alter_user_username_opts... OK 
    Applying auth.0005_alter_user_last_login_null... OK 
    Applying auth.0006_require_contenttypes_0002... OK 
    Applying account.0001_initial... FAKED 
    Applying default.0001_initial...Traceback (most recent call last): 
    File "./manage.py", line 11, in <module> 
    execute_from_command_line(sys.argv) 
    File "/project-path/lib/python2.7/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line 
    utility.execute() 
    File "/project-path/lib/python2.7/site-packages/django/core/management/__init__.py", line 330, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/project-path/lib/python2.7/site-packages/django/core/management/base.py", line 393, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/project-path/lib/python2.7/site-packages/django/core/management/base.py", line 444, in execute 
    output = self.handle(*args, **options) 
    File "/project-path/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 222, in handle 
    executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial) 
    File "/project-path/lib/python2.7/site-packages/django/db/migrations/executor.py", line 110, in migrate 
    self.apply_migration(states[migration], migration, fake=fake, fake_initial=fake_initial) 
    File "/project-path/lib/python2.7/site-packages/django/db/migrations/executor.py", line 148, in apply_migration 
    state = migration.apply(state, schema_editor) 
    File "/project-path/lib/python2.7/site-packages/django/db/migrations/migration.py", line 115, in apply 
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state) 
    File "/project-path/lib/python2.7/site-packages/django/db/migrations/operations/models.py", line 59, in database_forwards 
    schema_editor.create_model(model) 
    File "/project-path/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 286, in create_model 
    self.execute(sql, params or None) 
    File "/project-path/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 111, in execute 
    cursor.execute(sql, params) 
    File "/project-path/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/project-path/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/project-path/lib/python2.7/site-packages/django/db/utils.py", line 97, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/project-path/lib/python2.7/site-packages/django/db/backends/utils.py", line 62, in execute 
    return self.cursor.execute(sql) 
django.db.utils.ProgrammingError: relation "social_auth_association" already exists 

Проконсультируйтесь пожалуйста?

С уважением,

ответ

5

Из документации:

Единственная сложность заключается в том, если у вас есть цикл круговой зависимости от внешних ключей; в этом случае, makemigrations может сделать больше, чем одну начальную миграцию, и вы должны будете помечать их всех, как применяется с использованием:

python manage.py migrate --fake yourappnamehere 

Так что попробуйте запустить

python manage.py migrate --fake default 

И это должно сделать трюк ,

+0

, но я не сталкивается циклическую зависимость, ее прохождения этой точки и выполнение начинается миграции, а затем по какой-то причине пытаются создать таблица, которая фактически существует –

+0

Итак, вы получаете ту же ошибку, если вы применяете миграцию только для этого конкретного приложения? Возможно, вы внесли некоторые изменения в модели перед запуском 'makemigrations'? – zanderle

+1

На самом деле zanderle, оказалось, что вы предлагаете правильно и отработано, просто нужно удалить файлы pyc –

5

Тип python manage.py migrate --help

--fake Mark migrations as run without actually running them.

--fake-initial Detect if tables already exist and fake-apply initial migrations if so. Make sure that the current database schema matches your initial migration before using this flag. Django will only check for an existing table name.

 Смежные вопросы

  • Нет связанных вопросов^_^