wtforms FlaskForm / ModelForm不会将数据填充到表单中,也不会持久化数据

时间:2017-05-22 07:24:23

标签: python sqlalchemy flask-sqlalchemy wtforms flask-wtforms

当我单击SelectUser按钮时,表单不能正确填充数据库中的数据,也不会保留输入表单的数据。我认为这与我班上的宣言有关:

class AllUsersForm(FlaskForm, ModelForm):

有没有更好的方法来合并这两种不同类型的表单生成器?

views.py

@app.route('/manpower_edit_users', methods=['GET', 'POST'])
@login_required
def manpower_edit_users():
    form=AllUsersForm()
    if request.method=='POST':
        if request.form['submit']=='SelectUser':
            print("SelectUser")
            data=User.query.get(request.form['user_list'])
            forms=EditUsersForm(obj=data)
            flash("SelectUser")
        elif request.form['submit']=='Update' and form.validate():
            u=User()
            u.username=form.username.data
            u.email=form.email.data
            db.session.add(u)
            #db.session.commit()
            #rebuild forms
            #data=User.query.get(request.form['user_list'])
            #forms=EditUsersForm(obj=data)
            flash("User Updated, maybe not")
    return render_template('manpower_edit_users.html',title='Manpower Edit User', form=form)

forms.py

from flask_wtf import FlaskForm
from wtforms_alchemy import ModelForm

class AllUsersForm(FlaskForm, ModelForm):
    user_list = QuerySelectField('Choose User', query_factory=lambda: User.query.order_by('username'),
        allow_blank=False)

    class Meta:
        model=User
        exclude=['password_hash']

models.py

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(32), index=True, unique=True, nullable=False)
    password_hash = db.Column(db.String(128))
    email = db.Column(db.String(120), index=True, unique=True)
    posts = db.relationship('Post', backref='author', lazy='dynamic')
    #mobilitys = db.relationship('Mobility', backref='username', lazy='dynamic')
    about_me = db.Column(db.String(140))
    last_seen = db.Column(db.DateTime)
    followed = db.relationship('User',

    def __repr__(self):  # pragma: no cover
        return '<user> %r' % (self.username)

manpower_edit_users.html

<!-- extend base layout -->
{% extends "base.html" %}

{% block content %}
{% from "_formhelpers.html" import render_field %}
    <h1>{{ _('Welcome to Manpower, %(username)s!', username=g.user.username) }}</h1>
    {% include 'flash.html' %}
    <div class="well">
        <form class="form-horizontal" method="post">
            {{ form.hidden_tag() }}
            <div class="control-group">
                {{ render_field(form.user_list) }}
                <input class="btn btn-primary" type="submit" name="submit" value="SelectUser">
                <input class="btn btn-primary" type="submit" name="submit" value="Update">

        </form>
    </div>
    <table border="1" cellpadding="5" cellspacing="5" width="100%" style="background color:white">
    {% for attr, value in form._fields.iteritems() %}
        <tr>
            <th>{{ attr }}</th>
            <td>{{ value }}</td>
        </tr>
    {% endfor %}
    </table> 
{% endblock %}

0 个答案:

没有答案