Sto utilizzando South con la mia app Django. Ho due modelli che sto cambiando dall'avere una relazione ForeignKey
con una relazione OneToOneField
. Quando ho eseguito questa migrazione sul mio database di sviluppo, è andato tutto bene. Quando le migrazioni vengono eseguite come parte della creazione di un database di test, la migrazione più recente non riesce con un errore 1005 MySQL: "Impossibile creare table mydb. # Sql-3249_1d (errno: 121)". Fare un po 'su Google ha rivelato che questo è solitamente un problema con il tentativo di aggiungere un vincolo con lo stesso nome di un vincolo esistente. La riga specifica nella migrazione che questo non si verifica è:Django - Modifica una relazione ForeignKey con OneToOne
Il rapporto è stato modificato da:
class MyModel(models.Model):
othermodel = models.ForeignKey(OtherModel)
a
class MyModel(models.Model):
othermodel = models.OneToOneField(OtherModel)
che ha generato le seguenti istruzioni nella migrazione:
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'])
Ma invece di non riuscire sulla chiamata create_unique
, non funziona sullo 01 Chiamata. Ho eseguito il seguente comando per vedere quali SQL è stato generato:
python manage.py migrate myapp 0010 --db-dry-run --verbosity=2
e stampato fuori
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`) []
Sembra strano che si sta cercando di eseguire il ADD CONSTRAINT
due volte, ma se mi tolgo la db.create_unique
chiamata, non viene generato SQL quando lo eseguo con --db-dry-run
, ma ottengo ancora l'errore se lo eseguo per davvero.
Sono in perdita qui, ogni aiuto è apprezzato.
ho creato esattamente la stessa migrazione alcuni giorni fa e ha funzionato bene. Potresti provare lo stesso codice con un back-end del database diverso (l'ho fatto su un database PostgreSQL). Inoltre, controlla la versione Sud. – emyller
Vorrei poterti aiutare - Ho apportato la modifica, generato lo stesso codice Python e SQL, e la migrazione è andata bene, usando mysql 5.1.56 per win32. – Hannele
Chiedilo nella mailing list Sud ed è molto probabile che tu trovi la risposta. –