- Drop support for Python < 3.6. #554
fields.StringField
sets data to None when form data is empty and an initial value was not provided. Although it previously set an empty string, None is consistent with the behavior of other fields. #355- Specified version of Babel required for setup to avoid errors. #430
- Replaced use of getattr/setattr with regular variable access. #482
ValueError
raised by a validator are handled like regular exceptions. Validators need to raisevalidators.ValidationError
orvalidators.StopValidation
to make a validation fail. #445fields.SelectField
,fields.SelectMultipleField
andfields.RadioField
choices parameter can be a callable. #608- Choices shortcut for
fields.core.SelectMultipleField
. #603 #605 - Forms can have form-level errors. #55 #595
- Implemented
fields.core.MonthField
. #530 #593 - Filters can be inline.
form.BaseForm.process
takes a extra_filters parameter. #128 #592 - Fields can be passed the name argument to use a HTML name different than their Python name. #205, #601
- Render attribute names like for_ and class_ are normalized consistently so later values override those specified earlier. #449, #596
- Flags can take non-boolean values. #406 #467
- Widgets are HTML5 by default. #594 #614
- Fixed a bug when the
fields.core.SelectField
choices are list of strings. #598 - Error messages standardization. #613 #620 #626 #627
fields.core.SelectMultipleField
validate_choice bugfix. #606 #642- Fixed SelectMultipleField validation when using choices list shortcut. #612 #661