6

モデル ステータス フィールドのオプションの名前を変更する必要があります。

   STATUS = Choices(
    ('option_A', 'Option A'),
    ('option_B', 'Option B'),
   )

この変更の前は、同じオプションがありましたが、名前が異なっていました。新しい名前を尊重するようにプロジェクト内のすべてを変更しましたが、問題はそれらの新しい名前を表示するためにデータベースを更新することです。私はデータの移行に South を使用しています。データベースの列を追加または削除する必要がある場合、自動移行を作成するのはかなり簡単ですが、この更新を自分の既存の列。

Django 1.6 を使用しています。

4

3 に答える 3

6

あなたが探しているのはデータ移行です。

$ python manage.py datamigration your_app_label

これにより、移行フォルダーに新しい空の移行が作成されます。forwardsデータを希望どおりに変更するには、メソッドとメソッドを手動で作成する必要がbackwardsあります。

def forwards(self, orm):
    orm.MyModel.objects.filter(status='old_option_A').update(status='option_A')
    ...

def backwards(self, orm):
    # reverse of forwards, or raise an error to prevent backwards migrations

orm.MyModelこれを機能させるには、モデルを直接インポートする代わりに使用する必要があります。

次に、移行を実行します。

$ python manage.py migrate your_app_label

バージョン管理システムの同じコミットに移行とオプションの変更の両方を含めるようにしてください。これにより、これらは常に同期されます (人々が新しいバージョンに移行することを覚えている限り)。

于 2014-11-24T14:36:59.760 に答える
0

フィールドを変更したら、次を実行する必要があります。

$ python manage.py makemigrations your_app_label
$ python manage.py migrate 

(South が Django パッケージに含まれている Django 1.7 で動作します)

Django 1.6 の場合:

  • pip install South

  • -python manage.py schemamigration your_app_name --initial

  • -python manage.py 移行 your_app_name

  • モデルに変更を加える

  • manage.py schemamigration your_app_name --auto (変更を加えた移行が追加されます)

  • python manage.py 移行 your_app_name

また、South Migration の最初のステップのチュートリアルもここにあります。

于 2014-11-24T13:19:28.457 に答える