繁体   English   中英

Flask SQLAlchemy 多对多关系查询信息

[英]Flask SQLAlchemy query information in many to many relationship

我想查询由我的 order_id 过滤的数据库,并可以访问 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'))

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM