Проверка строки на наличие пробела возвращает ошибку в форме Django, даже если пробел отсутствует
В моей Django форме есть два поля, в которые пользователь должен вставить ровно одно слово. Поэтому, чтобы иметь некоторую валидацию в представлении, я создал следующий валидатор (идея заключается в поиске пробелов):
Views.py
[..]
if ' ' in poller_choice_one or poller_choice_two:
raise ValidationError(('Limit your choice to one word'), code='invalid')
else:
[..]
Чтобы сделать его более надежным, я добавил опцию strip
к полям формы, подлежащим валидации:
# Poller Choices
poller_choice_one = forms.CharField(label='Choice one', max_length=20, strip=True)
poller_choice_two = forms.CharField(label='Choice two', max_length=20, strip=True)
Я перепробовал кучу вводов, начиная от однозначных цифр и заканчивая одиночными символами и т.д., всегда возникает ошибка валидации
Ваше заявление if
интерпретируется как:
if (' ' in poller_choice_one) or (poller_choice_two):
# …
сначала будет проверено, есть ли пробел в poller_choice_one
. Если это не так, то он оценит истинность poller_choice_two
. Истинность str
инга имеет True
, если он содержит хотя бы один символ. Поэтому условие if
будет True
с того момента, когда в poller_choice_one
будет пробел или poller_choice_two
будет хотя бы один символ.
Таким образом, вы должны переписать условие так:
if ' ' in poller_choice_one or ' ' in poller_choice_two:
raise ValidationError(('Limit your choice to one word'), code='invalid')
# …
Используя regex, можно реализовать такой валидатор:
def validate(s0, s1):
return re.match(" ", s0) or re.match(" ", s1)
Пример:
poller_choice_one = "hi"
poller_choice_two = "how are you?"
if not validate(poller_choice_one, poller_choice_two):
raise ValidationError(('Limit your choice to one word'), code='invalid')