Шаблон django не отображает поля списка объектов
В настоящее время я работаю над проектом, используя django 4.0.3, и хочу создать приборную панель с последними действиями, выполненными пользователем. Например, у меня есть модель LTA, и я хочу, чтобы каждый раз, когда пользователь работает с LTA (создает, читает или обновляет), он добавлялся в недавно просмотренные LTA. Для этого я использую ключ сессии под названием "recently_viewed_lta", и каждый раз, когда пользователь работает с LTA, его Id добавляется в переменную сессии. Это работает отлично, проблема в том, что когда я пытаюсь отобразить их в шаблоне, они не отображаются. Надеюсь, код поможет понять мою проблему.
это мое мнение
def home(request):
ltas = Lta.objects.in_bulk(request.session["recently_viewed_lta"], field_name='numlta')
# ltas = Lta.objects.all()
env = Enveloppevol.objects.all()
rapports = Rapportvente.objects.all()
context = {
'ltas': ltas,
'env': env,
'rapports': rapports
}
print(ltas)
return render(request, "home.html", context)
Это мой дом.html
<p class="fs-3">Activité récente</p>
<p>Here are the ltas {{ ltas }} </p>
<p>Here is the session {{ request.session.recently_viewed_lta }} </p>
{% for i in request.session.recently_viewed_lta %}
<p>Session element {{ i }}</p>
{% for lta in ltas.items %}
<p>Lta n° {{ lta.numlta }} </p>
{% endfor %}
{% endfor %}
<hr>
вот вывод в браузере
Here are the ltas {75684: <Lta: Lta n° 75684>, 232323: <Lta: Lta n° 232323>, 252525: <Lta: Lta n° 252525>, 424242: <Lta: Lta n° 424242>, 565656: <Lta: Lta n° 565656>}
Here is the session ['424242', '232323', '75684', '565656', '252525']
Session's elements
Lta n°
Lta n°
Lta n°
Lta n°
Lta n°
Хотя если я заменю
ltas = Lta.objects.in_bulk(request.session["recently_viewed_lta"], field_name='numlta')
by
ltas = Lta.objects.all()
проблемы нет и шаблон корректно отображает все объекты. В чем может быть проблема? Заранее спасибо!!!
Because in_bulk возвращает dictionary:
in_bulk()
in_bulk(id_list=None, *, field_name='pk')¶
Принимает список значений полей (id_list) и имя_поля для этих значений и возвращает словарь, отображающий каждое значение на экземпляр объекта с данным значением поля.
Если вы передаете словарь по контексту, вы можете распаковать ключ и значение следующим образом:
{% for key, lta in ltas.items %}
<p>Lta n° {{ lta.numlta }} </p>
{% endfor %}