Flask SQLAlchemy在多对多关系中查询信息



我想查询按order_id筛选的DB,并可以访问category_name的信息。

我试着通读了几个这样的答案,但我不能完全达到我想达到的目的。我有一个模型,比如:

型号.py

product_category_table = db.Table('prouct_to_category_association',
db.Column('product_id', db.Integer, db.ForeignKey('product.id')),
db.Column('category_id', db.Integer, db.ForeignKey('category.id')))
class Category(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(120), index=True)
risks = db.relationship("Product", 
secondary=product_category_table,
back_populates="categories")
class Product(db.Model):
id = db.Column(db.Integer, primary_key=True)
order_id = db.Column(db.Integer, db.ForeignKey('Order.id'))
product_value = db.Column(db.Float(1,2), index=True)
categories = db.relationship("Category", 
secondary=risk_category_table,
back_populates="risks")

我现有的查询看起来像:

products = Product.query.filter_by(order_id = 1).all()

当我想访问我正在使用的信息时(以Jinja2格式(:

{% for product in products %}
cat = {{product.categories}}, val={{product.product_value}}
{% endfor %}

这允许我打印:

cat = [1], val = 5.99, cat = [2], val = 6.55, and so on...

然而,我不知道如何不仅访问category.id,而且访问实际的category.name。。。我理解为什么我要得到category.id(来自关联表(。

问题

  1. 如何更新我的查询,以便返回包含此信息
  2. 如何在Jinja中引用它

您可以在类别表中进行backref

risks = db.relationship("Product", 
secondary=product_category_table,
back_populates="categories",backref=db.backref('cat'))

使用jinja2中的product.cat.nameproduct.cat.risks访问它使用backref后,您可以访问类别的所有行

最新更新