2012-03-05 12 views
3

南の移行を使用して、私のdjangoモデルで外部キーの名前を変更する必要があります。私はこのスレッドを見つけたとき私は運が良かったと思ったHow to rename a foreignkey field with South?しかし、そこに記述されているすべてのメソッドは、さまざまなエラーで失敗します。誰かが実際にこれを行う正しい方法を知っていますか?私は任意の助けをSomeModel.owner = models.ForeignKey(User)SomeModel.registered_to = models.ForeignKey(User)の名前を変更し、Userownerとの関係を維持したい正しい方法でdjango-southの外部キーの名前を変更する方法

いただければ幸いです!

答えて

3

フィールド名を変更してpython manage.py schemamigration --auto yourappを実行します。 Southは列を削除して新しい列を追加するコードを追加します。 Southにマイグレーションを生成させることで、ORMが適切にフリーズされることが保証されるので、実際のマイグレーションをdropおよびaddではなくrenameに変更するだけです。ただ、前方からこれらの行を削除し、後方への移行とに置き換える:

def forwards(self, orm): 
    db.rename_column('yourapp_yourmodel', 'registered_to_id', 'owner_id') 

def backwards(self, orm): 
    db.rename_column('yourapp_yourmodel', 'owner_id', 'registered_to_id') 

保存して、あなたのアプリケーションを移行します。

+0

上記のテクニックは、私が上にリンクしたスレッドで言及されており、私はそれを試しました。それは動作するように見え、例外をスローしません。しかし、 'SomeModel.owner'にアクセスしようとすると、' DoesNotExist'が呼び出されます。 –

+3

Postgresでは、これは外部キー名を変更するために働くようです。制約名は同じですが...それは重要ですか? – Nils

関連する問題