Передать отмеченные галочками записи в таблицу на новой странице. 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>
Окошко вывода терминала прилагаю