2011-07-11 3 views
1

から私はいくつかのシステムをしていたし、私のテーブルのデザインは、このようなものだった:ジャンゴ南:移行FK別のテーブル

​​

により、いくつかの要件の変化に、私は、AからBへのForeignKey(C)を移動する必要がありますしたがって、次のようになります。

Table A: 
    - ID 

Table B: 
    - ID 
    - ForeignKey(A) 
    - ForeignKey(C) 

-Table C: 
    - ID 

スキーマの移行は簡単でした。しかし、前回はすでにテーブルAに既存のFKデータがありますが、すぐに削除することはできません。このFKをテーブルBに移行する必要があります.Bの構造はデータだけでなく、内部も異なります。私がBのモデルにForeignKey(C)を追加すると、Southはデフォルト値を提供せず、NULLを許可しないのでデフォルト値を求めていました。選択は、スキーママイグレーションをやめ、デフォルト値を手動で追加するか、または1回限りの値を提供することでした。

私の質問は、サウス?を使ってテーブルAの既存のデータからインポートされるデフォルト/ 1回の値を追加するにはどうすればいいですか。私は、この同様の問題が、運:(

感謝を探していたこの種の移行を行うとき

+0

南の開発者はあなたに良いアプローチを与えるかもしれませんが、私が探究しているように、そのようなサポートはありません。 – brsbilgic

答えて

6

私はいつも3つのマイグレーションを作成します。

  1. は、新しいフィールド
  2. (データ移行を作成します)は、古いフィールドから新しいフィールドにデータをコピーします(おそらく変換あり)
  3. は、古いフィールドを削除します。

この方法では、最初と3回目の移行で南からの自動スキーマ移行を使用でき、単純な変換コードを書くだけで済みます。これは南チュートリアルのthis exampleのように機能します。

関連する問題