あるケースでは django.db.models.fields.DecimalField を使用していますが、その検証エラーはかなり悪いです。
同様に、ユーザーが 3.4 の代わりに 3,4 を入力すると、「数字を入力してください」と表示されます。3,4 は、一部の国では 3.4 と同じ数です。少なくとも、コンピューターに詳しくない人には。
そのため、このフィールドの検証をオーバーライドして、自分で検証できるようにしています。
私の問題は- modelforms clean_my_field() が呼び出される前に、モデル自体の検証が機能し、すでにエラーが発生していることです。
だから私はhttps://docs.djangoproject.com/en/dev/ref/models/instances/#validating-objectsを調べました
これを読んだ後、私は私ができることを理解しました
def full_clean(self):
super(MyModel, self).full_clean(exclude = 'my_field')
my_field は検証から除外され、自分で検証できます
def clean(self)
pass
#how do i access cleaned data here anyway?
#self.cleaned_data does not exist
#is self.my_field the only way?
しかし悲しいかな - それはうまくいきません。self.my_field 値は clean() メソッドの古い値であり、cleaned_data はどこにも見つかりません。
このすべてが、私のアプローチが間違っていると私に思わせます。ジャンゴの DecimalField を拡張する独自のフィールドを書くことができたと思います。このアプローチはうまくいくと思いました...誰かが私のためにこれを解決できますか-なぜうまくいかないのですか。それが機能しない場合、なぜそこを除外するのですか?ちなみにDjangoのバージョンは1.4.2。
アラン
編集:私はより深く掘り下げました。すべてのモデルのクリーニング方法をオーバーライドし、スーパーをまったく使用しない場合でも、フィールドはある時点でまだクリーニングされており、それまでにエラーがすでに発生しているようです。
この場合、django.db.models.fields.DecimalField への拡張を行うと思います。
なぜexcludeがfull_cleanメソッドにあるのかについての答えはまだいいでしょう. 機能しない場合、なぜそこにあるのですか?