Django - Altere uma relação ForeignKey para OneToOne
Estou usando o sul com meu aplicativo Django. Eu tenho dois modelos que estou mudando de ter umForeignKey
relação a ter umOneToOneField
relação. Quando executei essa migração no meu banco de dados dev, ela funcionou bem. Quando as migrações são executadas como parte da criação de um banco de dados de teste, a migração mais recente falha com um erro do MySQL 1005: "Não é possível criar a tabela mydb. # Sql-3249_1d (erro: 121)". Ao pesquisar no Google, revelou que esse geralmente é um problema ao tentar adicionar uma restrição com o mesmo nome que uma restrição existente. A linha específica na migração em que falha é:
A relação foi alterada de:
class MyModel(models.Model):
othermodel = models.ForeignKey(OtherModel)
par
class MyModel(models.Model):
othermodel = models.OneToOneField(OtherModel)
que gerou as seguintes instruções na migração:
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'])
Mas, em vez de falhar nocreate_unique
está falhando noalter_column
ligar. Executei o seguinte comando para ver qual SQL estava sendo gerado:
python manage.py migrate myapp 0010 --db-dry-run --verbosity=2
e impresso
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`) []
Parece estranho que ele esteja tentando executar oADD CONSTRAINT
duas vezes, mas se eu remover odb.create_unique
chamada, nenhum SQL é gerado quando eu o executo com--db-dry-run
, mas ainda recebo o erro se o executar de verdad
Estou perdendo aqui, qualquer ajuda é apreciada.