2014-10-08 4 views
8

Я использую django 1.7 для своего приложения. Я столкнулся с несколькими проблемами миграции. Каждый раз, когда я пытаюсь изменить имя поля в моделях, которые являются внешним ключом, он ломается. Единственное исправление - перейти в базу данных и исправить ее, и они запустили migrate, а затем syncdb. Как я могу их решить, так как мое приложение становится больше, и я скоро потрачу больше времени на устранение ошибок базы данных по мере изменения моей схемы. Юг не поддерживается для django 1.7 и имеет собственную миграцию, которая не является мощной (я не уверен, только новичок)Юг с django 1.7

+1

Что заставляет вас думать, Встроенные миграции Django не так сильны? Напротив, они значительно более мощные: автор Юга написал новую функциональность, и он тесно интегрирован с Django. –

+0

Я просмотрел документы. Но он ломается, когда я пытаюсь изменить имя внешнего ключа, и время от времени мне нужно пойти и исправить его вручную в mysql. – theblackpearl

+0

Вы можете использовать 'default = callback_function' для' ForeignKey'? например ... 'parent = models.ForeignKey ('Parent', default = get_parent, null = False)' – pztrick

ответ

8

Структура миграции в Django 1.7 основана на Юге. Я вы обновляете вы должны прочитать:

https://docs.djangoproject.com/en/1.7/topics/migrations/#upgrading-from-south

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

Обновления с юга Если у вас уже есть предварительно существующие миграции созданных с югом, то процесс обновления использовать django.db.migations довольно просто:

Убедитесь, что все установки полностью обновлены с их миграциями. Удалить 'юг' от INSTALLED_APPS. Удалите все ваши (нумерованные) миграции файлы, но не каталог или init .py - убедитесь, что вы также удалили файлы .pyc. Запустите python manage.py makemigrations. Django должен увидеть пустые каталоги миграции и внести новые начальные миграции в новый формат . Запустите python manage.py migrate. Django увидит, что таблицы для начальных миграций уже существуют и отмечают их как , применяемые без их запуска. Это оно! Единственное осложнение заключается в том, что если у вас есть циклический цикл зависимостей внешних ключей; в этом случае, makemigrations может сделать больше, чем одну начальную миграцию, и вы будете нужно пометить их все как применяется с использованием:

питон manage.py мигрировать --fake yourappnamehere

+0

У меня нет приложений с более ранними версиями django. У меня это на 1.7, вопрос был в том, что я могу сделать, чтобы решить проблемы, с которыми сталкиваюсь с миграциями, поскольку использование юга не является вариантом для django 1.7. – theblackpearl

+0

Просто обратите внимание, что если вы достигнете выше 1,7, документы скажем, запустить «manage.py migrate», но вам нужно запустить «manage.py migrate --fake-initial». В 1.7, --fake-initial был значением по умолчанию, а затем он упал позже. – theicfire

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