Вы должны добавить еще одно поле в вашей форме, например TextField()
и сделать его validator.Optional()
.
Затем с простым javascript и событием onchange
вы можете display:none
это поле по умолчанию, и если пользовательвыберите Other
показать его.
В конце, если вы хотите, чтобы пользователь «описал, что они значат», вы можете добавить в класс YourForm этот метод:
def validate(self):
""" Add custom validators after default validate
"""
success = super(YourFormClass, self).validate()
if 'Other' in self.impact.data and len(self.impact_other.data) < 1:
success = False
self.impact.errors.append(gettext('Please fill impact_other field if you had selected "Other"'))
return success
(при условии, что другое полесозданный вами файл имеет имя impact_other
)
РЕДАКТИРОВАТЬ: я немного изменил свою функцию validate () для работы с SelectMultilpleField вместо SelectField
Далее, вам не нужно передавать other_enable
переменнуюв ваш шаблон, по умолчанию, если ничего не выбрано, вы должны скрыть otherField
, поэтому вам нужно запускать js не только onchange, но и после загрузки страницы.
Вы просто должны проверить в своей функции js if 'Другое 'выбрано в вашем поле impact
, если да, то покажите свое поле.Вы можете посмотреть этот вопрос для получения дополнительной помощи при обнаружении выбранных значений в JS: здесь
Кроме того, вам нужно сделать form = MyForm(request.form)
, чтобы сохранить ввод пользователя, если проверка формы не удалась.