【发布时间】:2018-11-15 20:56:43
【问题描述】:
出于本示例的目的,请考虑以下table,它有一个parent 行迭代“订单”列表,每个“订单”有几个child 行迭代一个给定的“项目”列表“命令”。
当我们使用query 渲染我们的模板时,“订单”和“商品”列表包含在单独的tables 中:
def order_items_template():
return render_template('order_items_template.html',
order_items_query = db.session.query(orders)
.join(items, orders.id == items.order_id)
.all())
请注意,我们还使用bootstrap collapsible accordion 来显示父/子行。
{% for order in orders %}
<tr data-toggle="collapse" data-target="#{{ order.number }}" class="clickable">
<td>{{ order.number }}</td>
</tr>
{% for item in order %}
<tr class="no-border collapse" id="{{ order.number }}">
<td>{{ item.name }}</td>
</tr>
{% endfor %}
{% endfor %}
此外,我们使用sqlalchemy ForeignKey relationship 连接这两个表:
class items (db.Model):
id = db.Column('id', db.Integer, primary_key = True)
item = db.Column(db.String(100))
order_id = db.Column(db.Integer)
class orders (db.Model):
id = db.Column('id', db.Integer, primary_key = True)
orders = db.Column(db.String(100))
item_id = db.Column(db.Integer, db.ForeignKey('items.order_id'), nullable=False)
item_relashionship = relationship("items")
虽然parent 行显示,但rows 中的数据却没有。有谁看到问题出在哪里?
编辑:通过将“子”jinja2 loop 从{{ % for item in order % }} 更改为{{ % for item in order.items % }},如下所示,不会返回任何数据,bootstrap accordion 已“损坏”且不再折叠。
出于测试目的,将{{ order.item_relashionship.name }} 占位符添加到“父循环”会返回匹配order_id 的item 的名称,这显然是错误的。
我们想要的是每个order 对应的items 列表。这一定与两个表之间的关系有关,但我无法弄清楚缺少什么。
【问题讨论】:
标签: python python-3.x flask jinja2 flask-sqlalchemy