Django ModelForm浮点字段不调用Clean_Field方法

时间:2013-09-30 12:49:50

标签: django forms modelform

我遇到了一个独特的问题。 我在我的floatField中输入“$ 90”值。 我认为它应该被清理并在模型中存储为“90.0”。

但是当我输入“$ 90”并调用clean_filed方法时,它不会调用那个干净的方法。 但是当我在干净的(自我)方法上应用断点并试图获得它的价值时,它说没有。

请帮帮我。这是我的代码。

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 

1 个答案:

答案 0 :(得分:14)

表单API中的clean_<field>挂钩用于执行其他验证。它在字段调用其clean方法后调用。如果该字段不认为输入有效,则不调用clean_<field>。这在自定义验证文档https://docs.djangoproject.com/en/stable/ref/forms/validation/

中注明
  

对于任何字段,如果Field.clean()方法引发ValidationError,则不会调用任何特定于字段的清理方法。但是,仍会执行所有剩余字段的清理方法。

在您的情况下,由于$90未作为浮点验证,因此不会调用它。相反,你应该做的是创建一个FloatField的子类,它在将输入验证为浮点数之前清除输入(删除$等)。