2010-12-23 20 views
7

私はchoicesattributeを使用するDjangoモデルを持っています。Djangoモデルの選択肢を変更するにはどうすればよいですか?

COLOR_CHOICES = (
    ('R', 'Red'), 
    ('B', 'Blue'), 
) 
class Toy(models.Model): 
    color = models.CharField(max_length=1, choices=COLOR_CHOICES) 

私のコードは現在生産されており、追加の選択肢を追加したいと思います。

COLOR_CHOICES = (
     ('R', 'Red'), 
     ('B', 'Blue'), 
     ('G', 'Green'), 
) 

どうすればよいですか? Djangoはデータベース制約を使用して選択肢を強制しますか?データベースの移行(私はSouthを使用しています)を行う必要がありますか?あるいは、DjangoはPythonコードの選択肢の制限を強制するだけです。コードを変更して再起動するだけです。

ありがとうございます!

答えて

11

Djangoはデータベースレベルで選択肢を強制しません。ウィジェットの表示と検証でのみ使用します。あなたがそれらをもう少し「動的」したい場合は、異なるサーバー上の異なるものを持っているために、たとえば、あなたはsettings.py経由でそれらを定義することができます。

from django.conf import settings 

COLOR_CHOICES = getattr(settings, 'COLOR_CHOICES',(
     ('R', 'Red'), 
     ('B', 'Blue'), 
     ('G', 'Green'), 
)) 

を次に、あなたは、任意のデータベースの移行のためのあなたのsettings.py(不要にさまざまな選択肢を定義することができ!)。

+0

これはすばらしいアイデアです。しかし、DB移行の必要はありません。私はちょうどコードを変更して再起動する必要がありますか? – Adam

+0

はい...それを試すのは大したことではありませんよね? –

+0

大したことではありません。出来た!ありがとう! – Adam

1

フィールドがとてもデータベースはジャンゴに設定し、他のmodels.CharFieldと同じように扱いますmodels.CharFieldです:)

いいえ、それはあなたのDBに触れる必要はありません/選択肢を強制しません。

関連する問題