Flask sqlalchemy 使用Flask SQLAlchemy如何在jinja模板助手上检索多对多表额外字段
使用Flask SQLAlchemy,我试图使用一个带有附加字段的帮助表来使用多对多关系 模型定义:Flask sqlalchemy 使用Flask SQLAlchemy如何在jinja模板助手上检索多对多表额外字段,flask-sqlalchemy,Flask Sqlalchemy,使用Flask SQLAlchemy,我试图使用一个带有附加字段的帮助表来使用多对多关系 模型定义: prodord = db.Table('prodord', db.Column('prod_id', db.Integer, db.ForeignKey('Product.id'), primary_key=True), db.Column('order_id', db.Integer, db.ForeignKey('AOrder.id'), primary_key=True),
prodord = db.Table('prodord',
db.Column('prod_id', db.Integer, db.ForeignKey('Product.id'), primary_key=True),
db.Column('order_id', db.Integer, db.ForeignKey('AOrder.id'), primary_key=True),
db.Column('quantity', db.Integer)
)
class Product(db.Model):
__tablename__ = 'Product'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
class User(db.Model):
__tablename__ = 'User'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
class AOrder(db.Model):
__tablename__ = 'AOrder'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('User.id'))
timedate = db.Column(db.String)
products = db.relationship('Product', secondary=prodord, lazy='subquery',
backref=db.backref('orders', lazy=True))
调用模板:
@app.route('/orders')
def page_orders():
all_orders = AOrder.query.all()
return render_template('orders.html', orders=all_orders)
如何在模板上使用数量值?product.quantity为空,但p.name具有值:
{% for o in orders %}
<tr>
<td>{{o.timedate}}</td>
<td>
{% for p in o.products %}
{{p.quantity}} {{p.name}} <br />
{% endfor %}
</td>
</tr>
{% endfor %}
{%o在订单%}
{{o.timedate}}
{o.products%中p的百分比}
{{p.quantity}}{{p.name}}
{%endfor%}
{%endfor%}
您已经使用关联表建立了关系,该关联表实质上成为产品和订单模型之间的透明链接
因为您希望在该链接表中存储额外的数据,所以需要将其升级为关联对象,就像其他模型一样
关于如何做到这一点,这里有一个例子:
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")