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

的一部分