flask-wtf 显示两个表的连接
flask-wtf display join of two tables
我有两个表要连接在一起。
class Request(db.Model):
id = db.Column(db.Integer, primary_key=True)
client = db.Column(db.Integer, db.ForeignKey('client.id'))
offerSent = db.Column(db.Boolean)
(...)
class Client(db.Model):
id = db.Column(db.Integer, primary_key=True)
lastname = db.Column(db.String(60))
prename = db.Column(db.String(40))
requests = db.relationship('Request', backref='requestClient', lazy='dynamic')
(...)
所以我加入了两个表:
@app.route('/')
@app.route('/index')
@login_required
def index():
results = db.session.query(Request, Client).filter(Request.client == Client.id).all()
return render_template('index.html', title='Start', results=results)
然后我展示它们:
{% block app_content %}
<h4>User: {{ current_user.username }}!</h4>
{% for i in range(0, results|length) %}
{{ results[i][0].offerSent }}
{{ results[i][1].lastname }}
{% endfor %}
{% endblock %}
因此,如您所见,我必须对第二个维度进行硬编码才能从列表中获取正确的值 (results = [( Request 1, Client 13), (...,...)].
有没有更好的方法呢?例如。像 results.request.offerSent 和 results.client.lastname?
我相信你可以像这样在 Jinja 中使用 tuple unpacking,这似乎是你要找的东西:
{% block app_content %}
<h4>User: {{ current_user.username }}!</h4>
{% for req, client in results %}
{{ req.offerSent }}
{{ client.lastname }}
{% endfor %}
{% endblock %}
我在这里使用 req
因为 Flask 的 request
是 Jinja2 standard context
的一部分
我有两个表要连接在一起。
class Request(db.Model):
id = db.Column(db.Integer, primary_key=True)
client = db.Column(db.Integer, db.ForeignKey('client.id'))
offerSent = db.Column(db.Boolean)
(...)
class Client(db.Model):
id = db.Column(db.Integer, primary_key=True)
lastname = db.Column(db.String(60))
prename = db.Column(db.String(40))
requests = db.relationship('Request', backref='requestClient', lazy='dynamic')
(...)
所以我加入了两个表:
@app.route('/')
@app.route('/index')
@login_required
def index():
results = db.session.query(Request, Client).filter(Request.client == Client.id).all()
return render_template('index.html', title='Start', results=results)
然后我展示它们:
{% block app_content %}
<h4>User: {{ current_user.username }}!</h4>
{% for i in range(0, results|length) %}
{{ results[i][0].offerSent }}
{{ results[i][1].lastname }}
{% endfor %}
{% endblock %}
因此,如您所见,我必须对第二个维度进行硬编码才能从列表中获取正确的值 (results = [( Request 1, Client 13), (...,...)].
有没有更好的方法呢?例如。像 results.request.offerSent 和 results.client.lastname?
我相信你可以像这样在 Jinja 中使用 tuple unpacking,这似乎是你要找的东西:
{% block app_content %}
<h4>User: {{ current_user.username }}!</h4>
{% for req, client in results %}
{{ req.offerSent }}
{{ client.lastname }}
{% endfor %}
{% endblock %}
我在这里使用 req
因为 Flask 的 request
是 Jinja2 standard context