2015-12-06 5 views
3

Шаг за шагом, вот как я попал туда, где я сейчас ...Django ORM миграции даяние «ValueError: неверный буквальным для междунар()» на IntegerField

Я попытался запускали команду python manage.py migrate после изменения моего Order таблица в моей базе данных для включения включает flowertype = IntegerField() и мне сказали, что я не могу двигаться вперед с миграцией до тех пор, пока не буду a) установить значение по умолчанию для IntegerField() или b) let django установите его для меня. Я выбрал a и установил значение по умолчанию 'something', чтобы получить ошибку из моих волос.

Понимая, что я не должен был помещать строку в IntegerField(), я испробовал следующее, чтобы исправить эту проблему.

1) пытался сбросить models.IntegerField() к models.IntegerField(default='1')

2) пытался восстановить свою базу данных SQL, используя django-reset и он дал мне кучу ошибок, как `ImportError: не может импортировать имя sql_delete

3) комментирование моя модель Order, а затем работает makemigrations & migrate не напрасно.

ответ

3

Сбой миграции в python, поэтому он никогда не попадал в базу данных. Вы должны оставить все как есть, и зайдите в папку migrations/ и удалите миграцию, которая добавит поле flowertype (оно будет самым последним). Затем снова запустите python manage.py makemigrations, но убедитесь, что у вас есть flowertype = IntegerField(default=1) (неdefault='1'), которые заданы в определении модели.

EDIT для дальнейшего объяснения:

При выполнении команды makemigrations, Джанго инспектирует все определения модели в питоне и сравнивает их против того, что в базе данных. Если эти два не совпадают, django создаст файл миграции, который обновит базу данных, чтобы отразить определения модели, как они определены в вашем коде на языке python. Это то, что делает команда migrate, она запускает все новые файлы миграции.

Итак, в первый раз, когда вы запустили makemigrations, был создан файл миграции, который добавил столбец в таблицу Order и попытался установить значение каждой строки в 'something'.

Это сразу же не удалось, так как он пытался поместить str в поле и int.

Поскольку он не удался, если вы не удалили файл, все и каждый раз, когда вы запускаете migrate, django собирается продолжать пытаться запустить этот скрипт. Было два варианта: 1) Вы могли бы просто войти и отредактировать файл миграции вручную или 2) Вы можете просто удалить этот файл миграции и заново создать его, как только у вас установлены определения модели.

+0

Да! Ты полностью помог мне. Так оно и было. Я не могу дать вам кредит на ответ еще на 8 минут, потому что SO не позволит мне, но вы поняли, друг. Не могли бы вы объяснить мне, что удалил этот файл? Бесконечно благодарен. –

+0

Отредактирован ответ с более подробным объяснением. – dursk

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

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