当我单击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 %}