How do you set a default value for a WTForms SelectField?

I believe this problem is caused by the Field‘s data attribute overriding the default with something that WTForms doesn’t understand (e.g. a DB model object — it expects an int). This would happen if you have populated your form in the constructor like so:

form = PostForm(obj=post)

the solution is to manually set the data attribute after the form has been populated:

form = PostForm(obj=post)
form.category.data = (post.category.id
                      if page.category
                      else 0) # I make 0 my default

Leave a Comment