Передать отмеченные галочками записи в таблицу на новой странице. Django
Есть список меню кафе с галочками для выбора блюд и кнопкой "Отправить", которая переходит на новую страницу, где выведен список блюд, аллергенов и сумма заказа. Возникли сложности с формированием этой новой страницы. Идея состоит в том, чтобы передать id выбранных блюд и по этому id вытащить из базы menu_title, menu_price, menu_allergens и т.д. и построить таблицу со всеми данными.
Я передаю в views.py в переменную checks помеченные блюда, они формируются в виде листа стрингового типа, напр. ['2','3'], преобразую в числовой вид и при попытке скормить checks в MenuShow.objects.filter(id = checks) естественно, выходит ошибка, так как условие должно быть одно. Пробовал и MenuShow.objects.get() - но там возможен вывод только одного значения из БД. Сейчас реализовал получение c for in по одному QuerySet и объединяю их в один массив для передачи в html. Ничего не отображается. Может существует более простое и элегантное решение?
Как вывести таблицу на следующей странице со всеми данными? Буду благодарен за любое содействие в решении данной проблемы.
models.py
class MenuShow(models.Model):
menu_img = models.ImageField(upload_to='imgmenu/', verbose_name='Фото блюда')
menu_title = models.CharField(max_length=100, verbose_name='Название')
menu_ingredients = models.CharField(max_length=300, verbose_name='Состав')
menu_price = models.CharField(max_length=100, verbose_name='Цена, руб.')
menu_category = models.CharField(max_length=100, verbose_name= 'Категория (salads, soup, hotter, grill)')
menu_allergens = models.CharField(max_length=300, null=True, default='Нет', verbose_name='Наличие аллергенов')
menu_kkal = models.CharField(max_length=100, null=True, default='0', verbose_name='Пищевая ценность Ккал')
views.py
def checkout(request):
checks = request.POST.getlist('checks')
print(checks) #Проверяем наличие id галочек
array_num = [int(item) for item in checks] #перевод в числовой вид из стрингового представления
appen = []
for el in range(0, len(array_num)):
count = array_num[el] #получение значения первого элемента листа
chk = MenuShow.objects.get(id = count) #выбираем из БД значение, равное id объекта в БД
print(chk)
appen.append(chk) # присоединение к массиву для вывода двух и более галочек в итоговой таблице
checks_list = appen
print(appen)
return render(request, './checkout.html', {'checks' : checks, 'checks_list' : checks_list})
checkout.html
<section>
<div class="container">
<div class="row">
<h1>Выбрано {{ checks }}</h1>
</div>
</div>
</section>
<section>
<div class="container">
<div class="row">
{% for chk in checks_list %}
{{ chk.menu_title }}
{% endfor %}
<table>
{% for chk in checks_list %}
<tr><td> {{ chk.menu_title }}</td></tr>
{% endfor %}
</table>
</div>
</div>
</section>
menu.html
<div class="container">
<div class="row">
<form action="{% url 'checkout' %}" method="post">
{% csrf_token %}
<div class="col-md-10 col-md-offset-1">
<ul id="menu-pricing" class="menu-price">
{% for menu_item in menu_list %}
<li class="item {{ menu_item.menu_category }}">
<a href="#">
<img src="{{ menu_item.menu_img.url }}" class="img-responsive" alt="Food" >
<div class="menu-desc text-center">
<span>
<h3>{{ menu_item.menu_title }}</h3>
{{ menu_item.menu_ingredients }} <br>
Аллергены: {{ menu_item.menu_allergens }} <br>
Пищевая ценность: {{ menu_item.menu_kkal }} Ккал
</span>
</div>
</a>
<div>
<input type="checkbox" name="checks" value="{{ menu_item.id }}" />
<h2 class="white">{{ menu_item.menu_price }} руб.</h2>
</div>
</li>
{% endfor %}
</ul>
<div class="col-md-12 col-sm-12">
<button type="submit" id="submit" name="submit" class="btn btn-reservation">
<span><i class="fa fa-check-circle-o"></i></span>
Посчитать заказ!
</button>
</div>
</div>
</form>
</div>
</div>
Окошко вывода терминала прилагаю

UPD: С небольшой модификацией views.py и checkout.html удается вывести только один отмеченный элемент, при выборе нескольких уже генерируются пустые строки в таблице без данных.
views.py
def checkout(request):
checks = request.POST.getlist('checks')
print(checks) # Проверяем наличие id галочек
array_num = [int(item) for item in checks] # перевод в числовой вид из стрингового представления
appen = []
flag = False # флаг для определения 2 и более выбранных элементов (для if-else в HTML-шаблоне)
if (len(array_num)>1):
for el in range(0, len(array_num)):
flag = True
count = array_num[el] # получение значения первого элемента листа
chk = MenuShow.objects.get(id=count) # выбираем из БД значение, равное id объекта в БД
print(chk)
appen.append(chk) # присоединение к массиву для вывода двух и более галочек в итоговой таблице
checks_list = appen
else:
checks_list = MenuShow.objects.get(id=array_num[0])
flag = False
print(checks_list)
print(appen)
return render(request, './checkout.html', {'checks': checks, 'checks_list': checks_list, 'flag': flag})
checkout.html
<section>
<div>
<table class="table">
<thead>
<tr>
<th scope="col">№</th>
<th scope="col">Блюдо</th>
<th scope="col">Аллергены</th>
<th scope="col">Цена</th>
</tr>
</thead>
<tbody>
{% if flag == True %}
{% for el in checks_list %}
<tr>
<th scope="row">{{ checks_list.id }}</th>
<td>{{ checks_list.menu_title }}</td>
<td>{{ checks_list.menu_allergens }}</td>
<td>{{ checks_list.menu_price }}</td>
</tr>
{% endfor %}
{% else %}
<tr>
<th scope="row">{{ checks_list.id }}</th>
<td>{{ checks_list.menu_title }}</td>
<td>{{ checks_list.menu_allergens }}</td>
<td>{{ checks_list.menu_price }}</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
<div class="container">
<h1>Выбрано {{ checks }}</h1>
</div>
</section>

