Я использую Юг с моим приложением Django.У меня есть две модели, которые я меняю с отношения ForeignKey
на отношение OneToOneField
.Когда я запустил эту миграцию в своей базе данных dev, она прошла нормально.Когда миграция запускается как часть создания тестовой базы данных, последняя миграция завершается с ошибкой MySQL 1005: «Не удается создать таблицу mydb. # Sql-3249_1d (errno: 121)».Выполнение некоторого поиска в Google показало, что обычно это проблема с попыткой добавить ограничение с тем же именем, что и существующее ограничение.Конкретная строка в миграции, на которой происходит сбой:
Отношение было изменено с:
class MyModel(models.Model):
othermodel = models.ForeignKey(OtherModel)
на
class MyModel(models.Model):
othermodel = models.OneToOneField(OtherModel)
, что привело к созданию следующих операторов вМиграция:
db.alter_column('myapp_mymodel', 'othermodel_id', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['myapp.OtherModel'], unique=True))
db.create_unique('myapp_mymodel', ['othermodel_id'])
Но вместо сбоя при вызове create_unique
происходит сбой при вызове alter_column
.Я запустил следующую команду, чтобы увидеть, какой SQL генерировался:
python manage.py migrate myapp 0010 --db-dry-run --verbosity=2
и он распечатал
myapp:0010_auto__chg_field_mymodel_othermodel__add_unique_mymodel
= ALTER TABLE `myapp_mymodel` ADD CONSTRAINT `myapp_mymodel_othermodel_id_uniq` UNIQUE (`othermodel_id`) []
= SET FOREIGN_KEY_CHECKS=1; []
= ALTER TABLE `myapp_mymodel` ADD CONSTRAINT `myapp_mymodel_othermodel_id_uniq` UNIQUE (`othermodel_id`) []
Кажется странным, что он пытается запустить ADD CONSTRAINT
дважды,но если я удаляю вызов db.create_unique
, при запуске с --db-dry-run
SQL не генерируется, но я все равно получаю сообщение об ошибке, если я запускаю его по-настоящему.
Я в растерянности, любойпомощь приветствуется.