У меня есть такая таблица категорий,
category_id category parent_id
1 Engineering Null
2 Mechanical 1
3 Autombile 1
4 Medicine Null
5 Arts Null
6 Painting 5
7 Filmmaking 5
...
index.py
имеет следующий запрос,
...
cur = db.execute('SELECT * FROM tmp_category')
categories = get_dict(cur)
return render_template('index.html', categories=categories)
...
index.html
* Шаблон 1012 * имеет следующий код:
...
<select multiple class="category" name="category">
{% for category in categories %}
<option value="{{ category['category_id'] }}">{{ category['category'] }}</option>
{% endfor %}
</select>
...
Мой вопрос:
Так что любой category
, имеющий parent_id
, является подкатегорией этой первичной категории , Как мне показать имя родительской категории в виде <optgroup>
метки вместо просмотра их вместе с другими категориями?
Я попытался создать словарь в своем представлении, например,
parent_categories = {}
for category in categories:
if category['parent_id'] is not None:
try:
parent_categories[category['parent_id']].append(category['category'])
except:
parent_categories[category['parent_id']] = [category['category']]
print(parent_categories)
for category in categories:
print(category)
for parent_id, parent_category in parent_categories.items():
if category['category_id'] == parent_id:
parent_categories[parent_id] = {category['category']: parent_category}
print(parent_categories)
Вывод
{<parent_id>: {'<parent_category>': ['<sub_category>', '<sub_category>']}, ... }
Это правильный путь или есть более простой подход для достижения этого?