2012-09-12 5 views

答えて

49

MinValueValidatorを使用してください。

price = models.DecimalField(_(u'Price'), decimal_places=2, max_digits=12, validators=[MinValueValidator(Decimal('0.01'))]) 
+0

また、 'min_value = Decimal( '0.01')' – Martin

+4

を追加することもできますが、これはフォームフィールドで機能しますが、モデルフィールドに 'min_value = Decimal( '0.01')'をテストしませんでした。これは[model field docs](https://docs.djangoproject.com/en/1.7/ref/models/fields/)には記載されていません。 – Alasdair

+0

私は訂正しました。私のコメントはフォーム検証に関する最後の質問に答えます。 'min_value'はmodels.DecimalFieldでは機能しません。 – Martin

0

あなたはこのような何かを行うことができます:

# ..... 
class priceForm(ModelForm): 
    price = forms.DecimalField(required=False, max_digits=6, min_value=0) 

これを、また、ドキュメントによると「価格」

0

のバリデータ値のための責任がある、方法がないようですフィールドにデータベース制約のようなものを入れる。モデルバリデーションを呼び出したり、ModelFormを使用すると呼び出されるモデルの「バリデータ」を追加することができます。単純に値をオブジェクトに入れて、save()を入力すると、バリデータはスキップされます。

だから、あなたは、フォーム上の検証を追加することができたり、あなたがModelFormを使用する場合も、フォームレベルで実行しますモデルに検証を追加することができます。 docs on "How validators are run"から

は、バリデータがフォームで を実行する方法の詳細については、form validationを参照してください、そして、彼らはモデルで実行しているかについてValidating objects。あなたはモデル、 を保存するときに自動的に実行されることはありませんバリデーター に注意していますがModelFormを使用している場合、それはあなたのフォームに含まれている任意の フィールドであなたのバリデータを実行します。モデル検証がフォームとどのように相互作用するかについては、ModelForm documentation を参照してください。

+0

スポットがあります。 dbでオブジェクトを作成するときに、この検証を開始する場合。モデルの 'save()'メソッドをオーバーライドして 'self.full_clean()'を実行します。 – surfer190

関連する問題