Django表单验证错误的默认值

时间:2013-12-10 05:41:23

标签: django forms validation model default

class CustomerForm(forms.ModelForm):

    class Meta:
        model = Customer


class Customer(models.Model):
    balance = models.FloatField(default = 0.0)

form = CustomerForm(request.POST)
if form.is_valid():
    # is FALSE

当我提交没有balance字段的表单时,我收到验证错误,指出需要余额字段。那是为什么?

2 个答案:

答案 0 :(得分:2)

您可以帮助将clean_FIELDNAME方法添加到默认返回0.0的表单中。 在表单的清理过程中调用此方法。

class CustomerForm(forms.ModelForm):
    balance = models.FloatField(required=False)

    def clean_balance(self):
        if not 'balance' in self.cleaned_data or self.cleaned_data['balance'] is None:
            return self._meta.model._meta.get_field('balance').default
        else:
            return self.cleaned_data['balance']

处理此问题的另一种方法是使用表单清理方法将balance_data中的balance字段踢出,并让模型设置默认值。

class CustomerForm(forms.ModelForm):

    class Meta:
        model = Customer

    def clean(self):
        if 'balance' in self.cleaned_data and self.cleaned_data['balance'] is None:
            del self.cleaned_data['balance']
        return self.cleaned_data


class Customer(models.Model):

    balance = models.FloatField(blank=True, null=False, default=0.0)

答案 1 :(得分:1)

required=False足以代表balance中未{。}}字段进行检查。

还将forms.pyblank=True值添加到default字段

此处无需使用balance model方法。因为在您寻找自定义验证时会使用clean

django形式有两种自定义验证方法 -

1)您可以使用clean方法。

2)您可以使用clean