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