'Flask-wtf SelectMultipleField: how to configure default choices

In my app I use a among others a SelectMultipleField ("stektypes") for creating “stekken”, using the following form:

class createStekForm(FlaskForm):
    name          = StringField("Naam van de stek", validators=[DataRequired()])
    water         = StringField("Naam van het water", validators=[DataRequired()])
    description   = TextAreaField("Beschrijving van het water")
    stektypes     = SelectMultipleField(u'Stektypes', coerce=int)
    street        = StringField("Straat", validators=[DataRequired()])
    number        = StringField("Nummer", validators=[DataRequired()])
    postalcode    = StringField("Postcode", validators=[DataRequired()])         
    place         = StringField("Plaats", validators=[DataRequired()])
    country       = StringField("Land", validators=[DataRequired()])
    latitude      = DecimalField("Latitude", validators=[DataRequired()])
    longitude     = DecimalField("Longitude", validators=[DataRequired()])
    saveStek      = SubmitField("Bewaar stek")
    navigateTo    = SubmitField("Navigeer naar stek")
    addToSession  = SubmitField("Voeg stek toe aan sessie")

So far so good.

Somewhere else in the app I want to modify an individual “stek”, using a similar SelectMultipleField, but then initialized with the earlier defined values.

From the documentation [https://wtforms.readthedocs.io/en/2.3.x/fields/][1] I learned that that is possible as follows…

class wtforms.fields.SelectMultipleField(default field arguments, choices=[], coerce=unicode, option_widget=None)

In my case it does not work.

The view from which I am calling the form is as follows.


@stekken.route('/stek_modify<stekId>', methods=['GET', 'POST'])
@login_required

def stek_modify(stekId):

    form = createStekForm()  # coerce needs to be set in form definition!!!
       
    form.stektypes.choices = [(1, "aa"), (2, "bb"), (3, "cc"), (4, "dd")]   
    #form.stektypes.default = (2, 'bb')
    #form.stektypes.default = 2
    form.stektypes.default = 'bb'

    if form.validate_on_submit():
          ......
          ......
    
    return render_template('stek_modify.html', form=form, user=current_user, stek=selectedStek, key=current_app.config["GOOGLEMAPS_KEY"])

Any hints / tips would be appreciated.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source