Для целей этого примера рассмотрим следующую table
, в которой есть строка parent
, повторяющая список «заказов», а каждый «заказ» имеет несколько строк child
, повторяющих список «элементов» для данного"order".
Список "orders" и "items" содержится в отдельных tables
, объединенных вместе, когда мы отображаем наш шаблон с query
:
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
нет.Кто-нибудь видит, в чем проблема?
edit: путем изменения «потомка» jinja2 loop
с {{ % for item in order % }}
на {{ % for item in order.items % }}
, как указано ниже, данные не возвращаются, а bootstrap accordion
«ломается» и больше не сворачивается.
В целях тестирования добавление заполнителя {{ order.item_relashionship.name }}
в "родительский цикл" возвращает имя item
, совпадающее с order_id
, что, очевидно, неверно.
Нам нужен соответствующий список items
для каждого order
.Это должно быть как-то связано с отношениями между двумя таблицами, но я не могу понять, чего не хватает.