【发布时间】:2021-08-28 11:16:51
【问题描述】:
我想查询由我的 order_id 过滤的数据库并访问 category_name 的信息。
我已尝试阅读多个答案,例如this one,但我无法完全达到我想去的地方。我有一个模型,例如:
models.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(来自关联表)。
问题
- 如何更新我的查询,以便返回包含此信息?
- 如何在 Jinja 中引用它?
【问题讨论】:
-
奇怪的是你只收到
category.id,因为你的关系定义(product.category)实际上应该返回Category实例的列表。 -
@van 可能是我搞砸了如何在 Jinja 中引用...如果我 product.categories 我得到了 ID,但如果我尝试 product.categories.name 我什么也得不到。这是正确的方法吗
-
您应该能够通过
product.categories循环通过另一个嵌套循环,例如{% for category in product.categories %} cat = {{category.name}} {% endfor %} -
@van,嵌套循环就是答案。它也在提供类别信息。谢谢!
标签: python flask sqlalchemy jinja2 flask-sqlalchemy