2015-08-30 5 views
3

Я создал модель и выполнил syncdb, который создал таблицы в качестве моей модели.
После этого я модифицировал модель и выполнил makemigrations, который создал миграции, игнорируя таблицы, которые уже был создан syncdb.
Django 1.8 Syncdb vs migrate

Таким образом, я закончил с ошибкой «отношение уже существует».

Почему makemigations создавали все с нуля? Как исправить эту ситуацию?

+0

Попробуйте 'python manage.py migrate --fake '. –

+0

По какой-то причине он не применяет новые изменения. Я где-то читал, что перенос отмечен как выполненный в базе данных django_migrations. В любом случае я решил проблему, и я только узнал, что вы собираетесь удалить syncdb из django 1.9 –

+0

Да, это было устарело от Django 1.7 и будет удалено в Django 1.9. –

ответ

9

makemigrations создает новые миграции на основе изменений, обнаруженных в ваших моделях.

Также стоит отметить, что команда syncdb устарела с Django 1.7 и будет удалена в Django 1.9. Таким образом, вы должны использовать команду migrate.

От syncdb docs:

Устаревший начиная с версии 1.7:
Эта команда была осуждается в пользу команды migrate, который выполняет как старое поведение как также исполняющих миграции.

2

makemigration всегда создает один файл миграции, имеющий все изменения. Итак, когда вы запускаете makemigration в первый раз, он пытается найти предыдущий файл миграции. если не найден, создается один файл начальной миграции. И когда он пытается применить его к db, он обнаруживает, что отношение уже существует. И, таким образом, возникает ошибка. Лучшей практикой является, прежде чем обновлять модель, создать одну миграцию, а затем модифицировать модель.

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