私はDjangoアプリケーションでSouthを使用しています。私はForeignKey
の関係からOneToOneField
の関係に変化している2つのモデルを持っています。私のdevデータベースでこの移行を実行したとき、うまくいきました。テストデータベースを作成する際にマイグレーションが実行されると、「mydb。#sql-3249_1d(errno:121)」テーブルを作成できません。いくつかのGoogle検索を行うと、これは通常、既存の制約と同じ名前の制約を追加しようとすると問題になることが明らかになりました。それが失敗し、移行中の特定の行は次のとおりです。Django - ForeignKeyの関係をOneToOneに変更する
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'])
:
class MyModel(models.Model):
othermodel = models.ForeignKey(OtherModel)
移行で次の文を生成
class MyModel(models.Model):
othermodel = models.OneToOneField(OtherModel)
へ:
関係をから変更されました
create_unique
コールに失敗する代わりに、01で失敗していますが呼び出されます。
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
を削除する場合:私は、生成されていたものをSQL参照するには、次のコマンドを実行しました私は--db-dry-run
とそれを実行すると、SQLは生成されませんが、私はそれを実際に実行すると、私はまだエラーが発生します。
私はここで紛失していますが、何か助けていただければ幸いです。
私はいくつかの日前とまったく同じ移行を作成し、それがうまく走りました。別のデータベースバックエンドで同じコードを試すことができますか(私はPostgreSQLデータベース上でそれをやった)。 また、あなたの南のバージョンを確認してください。 – emyller
私は助けてくれました - 私は変更を加え、同じPythonとSQLコードを生成し、移行はmysql 5.1.56 for win32を使って正常に実行されました。 – Hannele
サウスメーリングリストでこれを尋ねると、その答えが見つかる可能性が高いです。 –