【发布时间】:2015-07-26 23:42:12
【问题描述】:
我正在关注Django Formset Documents 上发布的关于自定义表单集验证的示例,并稍作修改。我在示例中发现了一个缺陷,但不确定如何修复它。如果 3 个输入字段中的 1 个未完全填写,有没有办法检查数据的唯一性?显然,空表格被记录为“无”,这迫使我至少填写 2/3 组输入字段(名字/姓氏);否则,它将注册为重复项。为了说明我的意思:
forms.py
class UserInfo (forms.Form):
first_name = forms.CharField (max_length = 20, required = False)
last_name = forms.CharField (max_length = 20, required = False)
class BaseUserInfoFormSet (BaseFormSet):
def clean (self):
if any (self.errors):
return
firstnames = []
lastnames = []
errors = []
for form in self.forms:
firstname = form.cleaned_data.get ('first_name')
lastname = form.cleaned_data.get ('last_name')
if ((firstname in firstnames) or (lastname in lastnames)) and len (errors) < 2:
errors.append ('First and/or last name must be unique')
if ((firstname == '') or (lastname == '')) and len (errors) < 2:
errors.append ('First and/or last name cannot be blanked')
firstnames.append (firstname)
lastnames.append (lastname)
print ('First Name List: ', firstnames)
print ('Last Name List: ', lastnames)
if errors:
raise forms.ValidationError (errors)
return self.cleaned_data
只填写了一组名字/姓氏,这是控制台的结果。
First Name List: ['John']
Last Name List: ['Doe']
First Name List: ['John', None]
Last Name List: ['Doe', None]
First Name List: ['John', None, None]
Last Name List: ['Doe', None, None]
因为有重复的“None”,所以触发了错误:
errors.append ('First and/or last name must be unique')
【问题讨论】:
标签: python django forms django-forms formset