使用Flask-SQLAlchemy如何在jinja模板上检索多对多表的额外字段

时间:2018-02-22 15:37:23

标签: flask-sqlalchemy

使用Flask SQLAlchemy,我正在尝试使用带有其他字段的帮助程序表来使用多对多关系。

模型定义:

@app.route('/orders')
def page_orders():
    all_orders = AOrder.query.all()
    return render_template('orders.html', orders=all_orders)

调用模板:

{% for o in orders %}
    <tr>
        <td>{{o.timedate}}</td>
        <td>
            {% for p in o.products %}
                {{p.quantity}} {{p.name}} <br />
            {% endfor %}
        </td>
    </tr>
{% endfor %}

如何在模板上使用数量值? product.quantity为空,但p.name有值:

{{1}}

1 个答案:

答案 0 :(得分:1)

您已使用关联表设置关系,该关联表基本上成为产品和订单模型之间的透明链接。

由于您希望在该链接表中存储额外数据,因此您需要将其升级为关联对象,就像您的其他模型一样。

documentation goes into the detail如何做到这一点,这是一个例子:

class Association(Base):
    __tablename__ = 'association'
    left_id = Column(Integer, ForeignKey('left.id'), primary_key=True)
    right_id = Column(Integer, ForeignKey('right.id'), primary_key=True)
    extra_data = Column(String(50))
    child = relationship("Child", back_populates="parents")
    parent = relationship("Parent", back_populates="children")


class Parent(Base):
    __tablename__ = 'left'
    id = Column(Integer, primary_key=True)
    children = relationship("Association", back_populates="parent")


class Child(Base):
    __tablename__ = 'right'
    id = Column(Integer, primary_key=True)
    parents = relationship("Association", back_populates="child")