Пытаюсь собрать словарь из значений из БД
Цель: Создать словарь, примерно такой структуры:
d = {
0: {
'id': 'test_id',
'alias': 'test_alias',
'l2': {
'id': 'test2_id',
'alias': 'test2_alias',
'l3': {
'id': 'test3_id',
'alias': 'test3_alias'
}
}
},
}
Подробнее: Потом нужно передать в html файл, где с его(словаря) помощью построить трехуровневую разворачивающуюся менюшку (все началось с этого вопроса)
Что уже сделано:
for l1 in lavel.objects.all().filter(lvl=3):
print(type(l1.id))
d[l1.id]['id'] = l1.id
d[l1.id]['alias'] = l1.alias
d[l1.id]['l2'] = {}
for l2 in lavel.objects.all().filter(lvl=4).filter(owner=l1.id):
d[l1.id]['l2']['id'] = l2.id
d[l1.id]['l2']['alias'] = l2.alias
d[l1.id]['l2']['l3'] = {}
for l3 in lavel.objects.all().filter(lvl=4).filter(owner=l1.id):
d[l1.id]['l2']['l3']['id'] = l3.id
d[l1.id]['l2']['l3']['alias'] = l3.alias
Структура БД (Если нужно):
class lavel(models.Model):
owner = models.ForeignKey('self', null=True, on_delete=models.CASCADE)
lvl = models.IntegerField(null=True, default=0, verbose_name='Уровень')
alias = models.TextField(null=True, default='', verbose_name='Алиас')
title = models.TextField(null=True, default='', verbose_name='Заголовок')
txt = models.TextField(null=True, default='', verbose_name='Текст')
is_active = models.BooleanField(default=True, verbose_name='Пубикация')
Ошибка: Не ясна. Ругается на строчку d[l1.id]['id'] = l1.id. Из python3 manage.py shell выводит такую ошибку:
KeyError Traceback (most recent call last)
<ipython-input-94-d483ce0c0e32> in <module>
1 for l1 in lavel.objects.all().filter(lvl=3):
2 print(type(l1.id))
----> 3 d[l1.id]['id'] = l1.id
4 d[l1.id]['alias'] = l1.alias
5 d[l1.id]['l2'] = {}
KeyError: 6
Помогите, пожалуйста, сформировать нормальный словарь... Честно, я уже 3й день на этом застрял, а в проекте еще куча работы... Я буду крайне признателен любым(!) наводкам и советам!!! За ранее спасибо!