を許可します。 10進数を正の数だけに制限する方法はありますか?は、私はこのような10進数フィールドを作成している私のDjangoのモデルの中で唯一の正の10進数
フォームの検証を使用してこれをキャプチャする必要がありますか?
を許可します。 10進数を正の数だけに制限する方法はありますか?は、私はこのような10進数フィールドを作成している私のDjangoのモデルの中で唯一の正の10進数
フォームの検証を使用してこれをキャプチャする必要がありますか?
MinValueValidator
を使用してください。
price = models.DecimalField(_(u'Price'), decimal_places=2, max_digits=12, validators=[MinValueValidator(Decimal('0.01'))])
あなたはこのような何かを行うことができます:
# .....
class priceForm(ModelForm):
price = forms.DecimalField(required=False, max_digits=6, min_value=0)
これを、また、ドキュメントによると「価格」
のバリデータ値のための責任がある、方法がないようですフィールドにデータベース制約のようなものを入れる。モデルバリデーションを呼び出したり、ModelForm
を使用すると呼び出されるモデルの「バリデータ」を追加することができます。単純に値をオブジェクトに入れて、save()
を入力すると、バリデータはスキップされます。
だから、あなたは、フォーム上の検証を追加することができたり、あなたがModelForm
を使用する場合も、フォームレベルで実行しますモデルに検証を追加することができます。 docs on "How validators are run"から
:
は、バリデータがフォームで を実行する方法の詳細については、form validationを参照してください、そして、彼らはモデルで実行しているかについてValidating objects。あなたはモデル、 を保存するときに自動的に実行されることはありませんバリデーター に注意していますが
ModelForm
を使用している場合、それはあなたのフォームに含まれている任意の フィールドであなたのバリデータを実行します。モデル検証がフォームとどのように相互作用するかについては、ModelForm documentation を参照してください。
スポットがあります。 dbでオブジェクトを作成するときに、この検証を開始する場合。モデルの 'save()'メソッドをオーバーライドして 'self.full_clean()'を実行します。 – surfer190
また、 'min_value = Decimal( '0.01')' – Martin
を追加することもできますが、これはフォームフィールドで機能しますが、モデルフィールドに 'min_value = Decimal( '0.01')'をテストしませんでした。これは[model field docs](https://docs.djangoproject.com/en/1.7/ref/models/fields/)には記載されていません。 – Alasdair
私は訂正しました。私のコメントはフォーム検証に関する最後の質問に答えます。 'min_value'はmodels.DecimalFieldでは機能しません。 – Martin