Django 表单验证默认值错误

标签 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 字段的表单时,我收到一条验证错误,指出余额字段是必需的。这是为什么?

最佳答案

您可以帮助将 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']

处理此问题的另一种方法是使用表单 clean 方法将余额字段从 clean_data 中剔除,并让模型设置默认值。

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)

关于Django 表单验证默认值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20487016/

相关文章:

django - Nginx 子域重定向太多

Django 相当于每个用户的最新条目

Django:验证多个字段

php - 提交表单时丢失我的 $_GET 变量

Django:行级权限是针对特定规则的,还是关于 View ?

javascript - 无法在JS中隐藏表单

HTML、XHTML 验证错误 - 无法解决

validation - 更改默认验证消息

validation - @Valid 表单验证不适用于 Thymeleaf Spring Boot

javascript - 如何允许html表单仅在字段中的数字加起来达到一定总和时才提交