简体   繁体   中英

Prepopulate WTForms radio field with info from view

Using flask and WTForms. I am trying to combine my edit and create forms for posts. When a user clicks edit, the view checks if there is a post id passed, if there is it grabs the current info for that post and populates the form in the template. I can get this to work for every field but the 'main_post' field which is radio buttons.

View:

    @app.route('/posts-update' , methods=['POST','GET'])
    @login_required
    def posts_update():
        form = forms.Post()
        if request.method == 'POST' and request.form['id']:
            post = Post.query.filter_by(id=request.form['id']).first()
            form.title.data = post.title
            form.body.data = post.body

            # Works for all but main_post

            form.main_post.data = post.main_post

            # Also tried this and it didn't work
            # form = forms.Post(obj=post)
        else:
            post = False
            # form = forms.Post()
        return render_template('post_update.html', post=post, form=form)

Form:

    #post create and update
    class Post(Form):
        title = StringField('Title', validators=[DataRequired()])
        body = TextAreaField('Body', validators=[DataRequired()])
        main_post = RadioField('Make Main Post', choices=[('1', 'yes'), ('0', 'no')], validators=[DataRequired()])

Template:

        <input type="hidden" name="id" {% if post.id %}value="{{ post.id }}"{% endif %}>
    {{ form.title.label }} : {{ form.title }} <br/>
    {{ form.body.label }} : {{ form.body }} <br/>
    {{ form.main_post.label }} : {{ form.main_post }} <br/>
     <button class="button postfix"  type="submit">{% if post == False %}Add{% else %}Update{% endif %}</button>

A similar question was asked and answered here How to dynamically set default value in WTForms RadioField?

You should be able to do this by setting the default value and then running form.process() .

form.main_post.default = post.main_post
form.process()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM