I am trying to generate a drop down list of all the users in my database so I can assign admins later that can edit their information. I keep getting the following error from my template:
JavaScript
x
2
1
AttributeError: 'QueryAllUsers' object has no attribute '_fields'
2
views.py
JavaScript
1
7
1
@app.route('/mobility_add_users', methods=['GET', 'POST'])
2
@login_required
3
def mobility_add_users():
4
#users=User.query.all()
5
form=QueryAllUsers(request.form)
6
return render_template('mobility_add_users.html',title='Mobility Add Users', form=form)
7
forms.py
JavaScript
1
9
1
class QueryAllUsers(Form):
2
print("In QueryAll")
3
#users=User.query.all()
4
user_list = SelectField(u'Choose')
5
6
def __init__(self, *args, **kwargs):
7
self.user_list.choices=[(obj.id, obj.username) for obj in User.query.order_by('username')]
8
print("Query all done")
9
models.py
JavaScript
1
10
10
1
class User(db.Model):
2
id = db.Column(db.Integer, primary_key=True)
3
username = db.Column(db.String(32), index=True, unique=True)
4
password_hash = db.Column(db.String(128))
5
email = db.Column(db.String(120), index=True, unique=True)
6
posts = db.relationship('Post', backref='author', lazy='dynamic')
7
#mobilitys = db.relationship('Mobility', backref='username', lazy='dynamic')
8
about_me = db.Column(db.String(140))
9
last_seen = db.Column(db.DateTime)
10
mobility_add_users.html
JavaScript
1
14
14
1
<!-- extend base layout -->
2
{% extends "base.html" %}
3
4
{% block content %}
5
{% from "_formhelpers.html" import render_field %}
6
<form method=post>
7
<dl>
8
{{ form.hidden_tag() }}
9
{{ render_field(form.query) }}
10
</dl>
11
<p><input type=submit value=Register></p>
12
</form>
13
{% endblock %}
14
More of the error readback
JavaScript
1
20
20
1
File "/home/jsnyder10/Documents/45/app/templates/mobility_add_users.html", line 8, in block "content"
2
3
{{ form.hidden_tag() }}
4
5
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask_wtf/form.py", line 135, in hidden_tag
6
7
u'n'.join(text_type(f) for f in hidden_fields(fields or self))
8
9
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask_wtf/form.py", line 135, in <genexpr>
10
11
u'n'.join(text_type(f) for f in hidden_fields(fields or self))
12
13
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask_wtf/form.py", line 125, in hidden_fields
14
15
for f in fields:
16
17
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/wtforms/form.py", line 57, in __iter__
18
19
return iter(itervalues(self._fields))
20
I’m still new to this so please go easy on me.
Advertisement
Answer
Hope this helps.
JavaScript
1
16
16
1
from wtforms.ext.sqlalchemy.fields import QuerySelectField
2
3
4
class QueryAllUsers(Form):
5
user_list = QuerySelectField(
6
'Choose',
7
query_factory=lambda: User.query, // you can add order_by(I am not sure)
8
allow_blank=False
9
)
10
11
12
class User(db.Model):
13
// add below lines to your model. you can refactor this as per your need.
14
def __repr__(self):
15
return "<User(id='%s', name='%s')>" % (self.id, self.name)
16