【问题标题】:Django ModelForm float field not calling Clean_Field methodDjango ModelForm 浮点字段不调用 Clean_Field 方法
【发布时间】:2013-10-06 08:19:16
【问题描述】:

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

但是当我输入“$90”并调用 clean_filed 方法时,它不会调用该 clean 方法。 但是当我在 clean(self) 方法上应用断点并尝试获取它的值时,它说 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 

【问题讨论】:

  • 您是否尝试过其他输入?像没有“$”符号的“90”还是已经干净的“90.0”?试试看是否真的是清洁问题而不是其他问题

标签: django forms modelform


【解决方案1】:

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

中有说明

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

在您的情况下,因为 $90 没有验证为浮点数,因此不会被调用。相反,您应该做的是创建FloatField 的子类,在将输入验证为浮点数之前清理输入(删除$ 等)。

【讨论】:

    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 2021-01-22
    • 2017-07-11
    • 2012-11-18
    • 2015-03-13
    • 1970-01-01
    • 2014-04-05
    • 2018-06-25
    相关资源
    最近更新 更多