2016-07-28 12 views
3

で選択フィールド(PositiveSmallIntegerField)にCharFieldです変換:次のように私の現在のモデルが設定されているジャンゴ

Class MyClass(models.Model): 
    my_field = models.CharField(max_length=100,...) 

値のすべては、引数、"foo"または"bar"のために、どちらかです。私が代わりに以下を設定して、これはPositiveSmallIntegerFieldように変換したい

Class MyClass(models.Model): 
    FOO = 0 
    BAR = 1 
    FOO_BAR_CHOICES = (
     (FOO, 'foo') 
     (BAR, 'bar') 
    ) 
    my_field = models.PositiveSmallIntegerField(choices=FOO_BAR_CHOICES,...) 

は、私がPositiveSmallIntegerFieldことと私の古いデータのすべてを保つために、古いmy_field CharFieldですが変換できる方法はあります?または、モデルに新しいフィールドを追加し、古いフィールドに対してスクリプトを実行し、古いフィールドを削除して、PositiveSmallIntegerFieldの名前を古いCharFieldの名前に変更して値を取り込む必要がありますか?

+2

dbのデータ表現が変更されるため、データの移行が必要になります。 – wim

答えて

1

DjangoモデルChoiceFieldはありませんか?

CharFieldに「選択肢」を追加してデータを失うことはないと思います。 https://docs.djangoproject.com/en/1.9/ref/models/fields/#choices

ただし、フィールドタイプを 'PositiveIntegerField'に変更する場合は、複数の手順で行う必要があります。

  1. 選択肢
  2. /wをモデル化するためにPositiveIntegerFieldを追加し、古いフィールドを削除
  3. 新しいフィールドに古いフィールドからデータをコピーする...データ移行を書きます。 Djangoの移行に

ドキュメント:https://docs.djangoproject.com/en/1.9/ref/django-admin/#makemigrations

この情報がお役に立てば幸いです。

+0

ありがとう、それは私がする必要があると仮定していたものです。ただ誰かがより良い方法を持っていたかどうかを見たいと思った。 – Nwilson

関連する問題