Я следую примерам, опубликованным в Django Formset Documents относительно пользовательского набора форм. проверка с небольшим изменением. Я нашел ошибку в примере, но не знаю, как ее исправить. Есть ли способ проверить уникальность данных, если поле ввода 1 из 3 не заполнено полностью? По-видимому, пустая форма записывается как «Нет», что вынуждает меня заполнить как минимум 2/3 набора полей ввода (имя/фамилия); в противном случае он будет зарегистрирован как дубликаты. Чтобы проиллюстрировать, что я имею в виду:
формы.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]
Поскольку есть дубликаты «Нет», это вызвало ошибку:
errors.append ('First and/or last name must be unique')