Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 02.09.2021
Сообщений: 2

Передать отмеченные галочками записи в таблицу на новой странице

02.09.2021, 13:26. Показов 2004. Ответов 2

Студворк — интернет-сервис помощи студентам
Есть список меню кафе с галочками для выбора блюд и кнопкой "Отправить", которая переходит на новую страницу, где выведен список блюд, аллергенов и сумма заказа. Возникли сложности с формированием этой новой страницы. Идея состоит в том, чтобы передать 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
Python
1
2
3
4
5
6
7
8
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
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
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
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<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
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<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>
Окошко вывода терминала прилагаю во вложении
Миниатюры
Передать отмеченные галочками записи в таблицу на новой странице  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.09.2021, 13:26
Ответы с готовыми решениями:

Удалить отмеченные галочками строки в chekedListBox
Доброго времени суток. Вопрос. Есть chekedListBox из него нужно удалять отмеченные галочками строки. Написал код, но строки не...

Передать отмеченные записи в отчет
всем привет! подскажите пожалуйста, как можно сделать чтобы в табличной форме возле каждой записи был чекбокс и после отметки нужных...

Какое свойство ListBox (style = 1-checked) возвращает отмеченные галочками элементы?
Доброго времени суток! Не подскажите, какое свойство ListBox (style = 1-checked) возвращает отмеченные галочками элементы

2
0 / 0 / 0
Регистрация: 02.09.2021
Сообщений: 2
02.09.2021, 14:22  [ТС]
С небольшой модификацией views.py и checkout.html удается вывести только один отмеченный элемент, при выборе нескольких уже генерируются пустые строки в таблице без данных.

views.py
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<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>
Миниатюры
Передать отмеченные галочками записи в таблицу на новой странице   Передать отмеченные галочками записи в таблицу на новой странице   Передать отмеченные галочками записи в таблицу на новой странице  

0
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
09.09.2021, 11:52
Первое что надо, это передавать id в checks не строкой а цифрой, ну или преобразуй после в цифры
а запрос к базе сделай так:

MenuShow.objects.filter(id__in = checks)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.09.2021, 11:52
Помогаю со студенческими работами здесь

Добавление новой записи в таблицу
' выполнить запись в таблицу Dim row As DataRowView Me.ПродажаBindingSource.AddNew() row =...

Создание новой записи в таблицу
Всем здравствуйте! На листе &quot;Форма&quot; вписываются данные, при нажатии кнопки &quot;Создать акт&quot;, создается лист с номером акта, по...

Добавление новой записи в таблицу
Есть форма, в ней 3 поля для ввода: Стоимость товара, Количество и Сумма, и кнопка 'Добавить запись'. Нужно сделать так чтобы пользователь...

Добавление новой записи в таблицу
Привет всем! При добавлении новой записи в таблицу вознокает ошибка не может добавить первичнуй ключ Rows =...

Создание новой записи в таблицу
Всем здравствуйте! На листе &quot;Форма&quot; вписываются данные, при нажатии кнопки &quot;Создать акт&quot;, создается лист с номером акта, по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru