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/