![](/img/trans.png)
[英]PYTHON WTForms flask - saving data from drop down list to database
[英]generating drop down list of users in database using wtforms and sqlalchemy
我試圖生成數據庫中所有用戶的下拉列表,以便以后可以分配可以編輯其信息的管理員。 我不斷從模板中收到以下錯誤:
AttributeError: 'QueryAllUsers' object has no attribute '_fields'
views.py
@app.route('/mobility_add_users', methods=['GET', 'POST'])
@login_required
def mobility_add_users():
#users=User.query.all()
form=QueryAllUsers(request.form)
return render_template('mobility_add_users.html',title='Mobility Add Users', form=form)
forms.py
class QueryAllUsers(Form):
print("In QueryAll")
#users=User.query.all()
user_list = SelectField(u'Choose')
def __init__(self, *args, **kwargs):
self.user_list.choices=[(obj.id, obj.username) for obj in User.query.order_by('username')]
print("Query all done")
models.py
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(32), index=True, unique=True)
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)
mobility_add_users.html
<!-- extend base layout -->
{% extends "base.html" %}
{% block content %}
{% from "_formhelpers.html" import render_field %}
<form method=post>
<dl>
{{ form.hidden_tag() }}
{{ render_field(form.query) }}
</dl>
<p><input type=submit value=Register></p>
</form>
{% endblock %}
更多的錯誤回讀
File "/home/jsnyder10/Documents/45/app/templates/mobility_add_users.html", line 8, in block "content"
{{ form.hidden_tag() }}
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask_wtf/form.py", line 135, in hidden_tag
u'\n'.join(text_type(f) for f in hidden_fields(fields or self))
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask_wtf/form.py", line 135, in <genexpr>
u'\n'.join(text_type(f) for f in hidden_fields(fields or self))
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask_wtf/form.py", line 125, in hidden_fields
for f in fields:
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/wtforms/form.py", line 57, in __iter__
return iter(itervalues(self._fields))
我對此還很陌生,所以請放輕松。
該表格在您的視圖中未正確初始化,應為:
@app.route('/mobility_add_users', methods=['GET', 'POST'])
@login_required
def mobility_add_users():
#users=User.query.all()
form=QueryAllUsers(request.form)
return render_template('mobility_add_users.html',title='Mobility Add Users', form=form)
請參閱wtforms文檔。
希望這可以幫助。
from wtforms.ext.sqlalchemy.fields import QuerySelectField
class QueryAllUsers(Form):
user_list = QuerySelectField(
'Choose',
query_factory=lambda: User.query, // you can add order_by(I am not sure)
allow_blank=False
)
class User(db.Model):
// add below lines to your model. you can refactor this as per your need.
def __repr__(self):
return "<User(id='%s', name='%s')>" % (self.id, self.name)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.