2016-12-14 4 views
0

モデルオブジェクトを更新するAJAXリクエストがあります。これは、オブジェクトの罰金を保存しDjangoの更新オブジェクト - バリデータ

.update(**new_value) 

が、それは私を飛ばしています:私は、新しい値を保存する方法のupdate()を使用してい

new_value = {'attribute': 'value'} 

:それは次のように、辞書に新しい値を送信しますMinValueValidator:

field = models.DecimalField(... validators=[MinValueValidator(Decimal('0.01'))]) 

どうすればこのバリデーターをupdate()で使用できますか?それは管理者からはうまくいく。

+0

バリデータは決してフォームにありません – Sayse

答えて

0

@Sayseはコメントフォームに書いた通り、バリデータはフォーム(管理フォームも含む)でのみ動作します。

モデルにsave()メソッドをオーバーライドすることで、必要なものを達成できます。値がOKかどうかをチェックし、そうでなければ例外をスローします。

0

代わりの更新と私のオブジェクトを更新()私は辞書からデータを抽出し、field.cleanでseattrを呼ぶことになった:

field = item._meta.get_field(attribute) 
setattr(item, attribute, field.clean(attr_value, item)) 

バリデータが正しくスローされ、この方法を。

モデルのsave()メソッドをオーバーライドしてフィールドを検証し、例外をスローすることは、私が読んだことからはベストプラクティスではないかもしれません。おそらく、モデルにそのためのきれいなメソッドを書く方が良い方法でしょう。とにかく、Michał Wernerの答えは、私が尋ねたことに対処しているようです。

関連する問題