2016-05-01 6 views
2

Итак, сначала я побежал makemigrations, и тогда я побежал migrate и получил ошибку ValueError: The database backend does not accept 0 as a value for AutoField.Как переделать makemigrations после получения ошибки?

Так я пошел вперед, изменил мой models.py, чтобы исправить эту ошибку.

Теперь, когда я запускаю makemigrations, чтобы начать сначала, он работает. Тогда migrate на самом деле ничего не сделал, но снова показал ошибку. Таким образом, там есть миграция, что плохо, тогда есть одно после того, как это правильно.

Итак, я попробовал запустить ./manage.py migrate --fake mainapp zero после прочтения его на переполнении стека, и теперь он говорит django.db.utils.OperationalError: (1050, "Table 'mainapp_article' already exists").

Любые идеи о том, как я могу вернуться туда, где я начал, и повторить makemigrations теперь с ошибкой, удаленной из models.py?

ответ

7

1) Определите последнюю миграцию успеха:

./manage.py showmigrations mainapp 
[X] 0001_initial 
[X] 0002_auto_20160425_0102 
[X] 0003_auto_20160426_2022 
[X] 0004_auto_20160427_0036 

2) Затем с помощью Перенести для переноса базы данных в этой заданной точке миграции.

./manage.py migrate mainapp 0003_auto_20160426_2022 

В этом примере я предполагаю, что миграция 0003 прошла успешно, а 0004 - нет.

3) Удалите файл миграции

rm mainapp/migrations/0004_auto_20160427_0036.py* 

4) Выполнить makemigrations и мигрировать снова.

+1

Ouch ... Опция 'showmigrations' была введена в django 1.8. https://docs.djangoproject.com/ja/1.9/ref/django-admin/#django-admin-showmigrations – slackmart

+0

Я просто прыгнул в Django 1.9. Я уточню вопрос. Спасибо! – User

0

Если у вас плохая миграция, вы должны просто удалить ее и сгенерировать ее снова.