默认值的 Django 表单验证错误
Posted
技术标签:
【中文标题】默认值的 Django 表单验证错误【英文标题】:Django Form validation error for default value 【发布时间】:2013-12-27 12:43:09 【问题描述】: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
字段的表单时,我收到一个验证错误,指出余额字段是必需的。这是为什么呢?
【问题讨论】:
【参考方案1】:required=False
足以写不检查forms.py
中的balance
字段。
还将blank=True
和default
值放入balance model
字段
这里不需要使用clean
方法。因为每当您寻找自定义验证时,都会使用clean
。
django表单中自定义验证有两种方法-:
1) 你可以使用clean
方法。
2) 你可以使用forms.regexfield
。
【讨论】:
【参考方案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']
另一种处理方法是使用 forms clean 方法将 balance 字段踢出cleaned_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)
【讨论】:
唯一的问题是需要在 clean 方法中定义默认值,并且不要回退到模型中设置的默认值。 更改了 clean_ 方法以使用模型的默认值。以上是关于默认值的 Django 表单验证错误的主要内容,如果未能解决你的问题,请参考以下文章