すでにデータが含まれているデータベーステーブルを持つdjangoプロジェクトがあります。その列のデータを失うことなく、フィールド名を変更したいと思います。私の当初の計画は、dbテーブルの名前を実際には変更しない方法でモデルフィールド名を変更することでした(db_column
列パラメーターを使用)。
元のモデル:
class Foo(models.Model):
orig_name = models.CharField(max_length=50)
新しいモデル:
class Foo(models.Model):
name = models.CharField(max_length=50, db_column='orig_name')
ただし、Southを実行すると、元の列を削除し、新しい列を追加するschemamigration --auto
移行スクリプトが生成されます。これにより、その列のデータが削除されるという望ましくない副作用が発生します。(データベーステーブルの列の名前を変更せずにモデルフィールド名を変更できるというdb_columnの理解から、Southがdbの列の名前を変更したい理由についても混乱しています)。 orig_name
name
dbフィールドを変更せずにモデルフィールドを変更することをやめられない場合は、次のように、より簡単な名前の変更を行うことができると思います。
元のモデル:
class Foo(models.Model):
orig_name = models.CharField(max_length=50)
新しいモデル:
class Foo(models.Model):
name = models.CharField(max_length=50)
最終的にどの戦略を使用するかに関係なく(最初の戦略を優先しますが、2番目の戦略を受け入れます)、私の主な関心事は、その列に既にあるデータを失わないようにすることです。
これには複数のステップのプロセスが必要ですか?(1.列の追加、2。古い列から新しい列へのデータの移行、3。元の列の削除など)または、移行スクリプトを次のように変更できdb.alter_column
ますか?
列の名前を変更しながら、その列のデータを保持するための最良の方法は何ですか?