2016-03-29 7 views
6

migrationsを使用して、新しいフィールド(外部キー)をモデルに追加する必要があります。Djangoの外部キーのデフォルト値.AddField

migrations.AddField(
     model_name='MyModel', 
     name='state', 
     field=models.ForeignKey(null=True, related_name='mymodel_state', to='msqa_common.MyModelState'), 
    ), 

ただし、私は自分のフィールドがnullableであることを望んでいません。代わりに、名前が "使用可能"(MyModelStateのID値が異なるマシンで変更される可能性があります)のIDに対応するデフォルト値を使用したいと思います。テーブルMyModelStateのこの「使用可能な」値は、以前の移行スクリプトのデータベースに挿入されるため、存在します。

migrations.AddField(
     model_name='MyModel', 
     name='state', 
     field=models.ForeignKey(null=False, default=available_state_id, related_name='mymodel_state', to='msqa_common.MyModelState'), 
    ), 

私の質問:

私は私のような何かをする必要がありますねどのように私は私の移行スクリプト内available_state_idを得ることができますか?

答えて

16

あなたは直接行うことはできません。これを行うには、移行を作成してnull = Trueで追加してから、PythonまたはSQLのいずれかを使用して既存のすべてを更新してavailable_state_idを指すようにデータ移行を追加し、次に3回目の移行でnullに変更します=偽。

+0

ありがとうございました。このプロセスが説明されているドキュメントをご存知ですか? – eelioss

+2

https://docs.djangoproject.com/en/1.9/howto/writing-migrations/#migrations-that-add-unique-fields –