2011-11-10 34 views
22

私はいくつかの選択肢からなる私のdjangoモデルにchoicefieldがあるとします。今後、既存の選択肢(オプション)を別の名前(選択肢)で変更した場合、その選択肢(オプション)を持つモデルの既存のレコードも変更されるかどうかまたは管理ページで私は手動で新しいオプションを設定する必要がありますか?DjangoモデルのChoiceField

どうすればこの問題を解決できますか?

答えて

79

ChoiceFieldsはそうthe documentationから例を取るために、値としてデータベースに格納されています。

class Foo(models.Model): 
    GENDER_CHOICES = (
     ('M', 'Male'), 
     ('F', 'Female'), 
    ) 
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 
あなたは1日、それらの名前を変更することを決定したので、もしデータベースは、「M」と「F」を格納します

このような*:

class Foo(models.Model): 
    GENDER_CHOICES = (
     ('M', 'Homme'), 
     ('F', 'Femme'), 
    ) 
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 

は次にどこに展開した値「男性」または「女性」を使用し、今「オム」または「ファム」を持つことになります。

値を変更したい場合(つまり 'M'と 'F')、データベースを更新したいので、 'M'を 'H'に変更したい場合は、 Dの使用update:あなたは、私がこれをやって避けるだろう十分な理由を持っていない限り

Foo.objects.filter(gender = 'M').update(gender = 'H') 

- あなたが同時に行われてGENDER_CHOICESにご変更とあなたのupdateクエリを確認する必要がありますので、。

*はい、これは翻訳を行うための愚かな方法です。

関連する問題