6

私はユニークな種類の問題を抱えています。floatField に「$90」の値を入れています。モデルに「90.0」としてクリーニングして保存する必要があると思います。

しかし、「$90」と入力して clean_filed メソッドを呼び出すと、その clean メソッドは呼び出されません。しかし、クリーン(セルフ)メソッドにブレークポイントを適用してその値を取得しようとすると、Noneと表示されます。

私を助けてください。これが私のコードです。

Model
class Project(models.Model):
foo = models.FloatField("foo",
        null=True, blank=True
    )


forms
widgets = {
         'foo': forms.TextInput(attrs={'currency': 'true'})}

    def clean_foo(self):
        value = self.cleaned_data.get('foo')
        print value # i get NONE here.............
        return value 
4

1 に答える 1

17

フォーム APIのclean_<field>フックは、追加の検証を行うためのものです。フィールドが clean メソッドを呼び出した後に呼び出されます。フィールドが入力を有効と見なさない場合、clean_<field>は呼び出されません。これは、カスタム検証ドキュメントhttps://docs.djangoproject.com/en/stable/ref/forms/validation/に記載されています

どのフィールドでも、Field.clean() メソッドが ValidationError を発生させた場合、フィールド固有のクリーニング メソッドは呼び出されません。ただし、残りのすべてのフィールドのクリーニング メソッドは引き続き実行されます。

あなたの場合$90、 float として検証されないため、呼び出されません。代わりに、入力を float として検証する前に、FloatField入力を消去する ( を削除するなど)のサブクラスを作成する必要があります。$

于 2013-09-30T13:32:34.957 に答える