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

Работа с формой, неописанной в forms.py

11.08.2021, 22:41. Показов 1887. Ответов 8

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые коллеги!
Прошу спасти. Горю. Не так давно работаю с Django и застрял в одном месте. У меня есть форма, которая формируется в шаблоне на основании записей в таблице. Пользователь должен выбирать checkboxы и отправлять форму на сервер.
Вот вьюха:
Code
1
2
3
4
5
6
7
8
9
10
@login_required
def new_bef(request,case_id):
    if request.method=='POST':
        вот здесь нужна обработка
    else:
        atr=atributes.objects.filter(fortab__icontains="before").order_by('id')
        args={}
        args['case_id']=case_id
        args['atr']=atr
        return render(request,'newbef.html',args)
Вот так формируется форма:
Code
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
39
40
41
42
43
44
45
<form name="formbef" action="" method="post">
   {% csrf_token %}
  {% for a in atr %}
   {% if a.root == 1 %}
   <strong>{{a.nazv}}:</strong><br>
   {% for m in atr %}
    {% if m.roditel == a.pk %}
      {% if m.valtype == 1 %}
      -<input type="checkbox" id="{{m.pk}}" onchange="fun1('{{m.antogon}}','{{m.pk}}')">{{m.nazv}}
      {% if m.ispotomok == 1 %}
      :<br>
       {% for t in atr %}
         {% if t.roditel == m.pk %}
         {% if t.valtype == 1 %}
         -<input type="checkbox" id="{{t.pk}}" onchange="fun1('{{t.antogon}}','{{t.pk}}')">{{t.nazv}}<br>
         {% elif t.valtype == 2 %}
         -{{t.nazv}} <input type="number" id="{{t.pk}}"><br>
         {% elif t.valtype == 3 %}
         -{{t.nazv}} <input type="text" id="{{t.pk}}"><br>
         {% elif t.valtype == 4 %}
         -<input type="checkbox" id="{{t.pk}}" onchange="fun1('{{t.antogon}}','{{t.pk}}')">{{t.nazv}} <input type="text" id="{{t.pk}}"><br>
         {% elif t.valtype == 5 %}
         -<input type="checkbox" id="{{t.pk}}" onchange="fun1('{{t.antogon}}','{{t.pk}}')">{{t.nazv}} <input type="number" id="{{t.pk}}"><br>
        {% endif %}
         {% endif %}
       {% endfor %}
      {% else %}
      <br>
      {% endif %}
      {% elif m.valtype == 2 %}
      -{{m.nazv}} <input type="number" id="{{m.pk}}"><br>
      {% elif m.valtype == 3 %}
      -{{m.nazv}} <input type="text" id="{{m.pk}}"><br>
      {% elif m.valtype == 4 %}
      -<input type="checkbox" id="{{m.pk}}" onchange="fun1('{{m.antogon}}','{{m.pk}}')">{{m.nazv}} <input type="text" id="{{m.pk}}"><br>
      {% elif m.valtype == 5 %}
      -<input type="checkbox" id="{{m.pk}}" onchange="fun1('{{m.antogon}}','{{m.pk}}')">{{m.nazv}} <input type="number" id="{{m.pk}}"><br>
     {% endif %}
    {% endif %}
  {% endfor %}
  {% endif %}
  {% endfor %}
  <br>
<button type="submit" name="button">Добавить</button>
 </form>
Застрял на том КАК мне после того как форма отправлена ее распарсить на сервере и аккуратно посохранять в БД значения в зависимости от выбранного чекбокса. dict выдает csrf, кроме того.
Прошу помощи. Заранее благодарен.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.08.2021, 22:41
Ответы с готовыми решениями:

Symfony2, работа с типом Collection, работа с базовой формой
Здравствуйте. Осваиваю создание CRUD приложения на Symfony 2, на примере. Однако, возникают ошибки: 1)При модификации шаблона...

работа с формой
Здравстуйте. У меня такой,детский вопрос! ))) Есть форма с тимя радио кнопками &lt;form id=&quot;form1&quot;...

Работа с формой
uses vcl,sounds; //$VCLDESIGN+ var Form1: Form; Panel1: Panel; TextLabel1: TextLabel; Edit1: Edit; Button1: Button;...

8
9 / 7 / 3
Регистрация: 25.06.2009
Сообщений: 396
12.08.2021, 08:13
Почему формы без имен?
Python
1
var = request.POST.get('form_name')
или
Python
1
var = request.POST['form_name']
для checkbox
Python
1
arr = request.POST.getlist('form_name')
2
0 / 0 / 0
Регистрация: 25.11.2010
Сообщений: 12
12.08.2021, 08:16  [ТС]
Спрасибо. Вечером попробую! А как достать конкретный элемент по ID или еще какому-либо свойству?
0
9 / 7 / 3
Регистрация: 25.06.2009
Сообщений: 396
12.08.2021, 08:32
я же написал как по name значение формы достать
1
0 / 0 / 0
Регистрация: 25.11.2010
Сообщений: 12
12.08.2021, 18:48  [ТС]
К сожалению
Code
1
var = request.POST.getlist('formbef')
Возвращает None,

Code
1
var = request.POST.getlist('formbef[]')
Аналогично...

Добавлено через 4 минуты
Кроме того, len(var) возвращает непроходимый НОЛЬ
0
9 / 7 / 3
Регистрация: 25.06.2009
Сообщений: 396
12.08.2021, 19:22
скинь код с версткой как делаешь
0
0 / 0 / 0
Регистрация: 25.11.2010
Сообщений: 12
12.08.2021, 20:05  [ТС]
Все просто. БД строится по принципу EAV. Есть таблица атрибутов, в которой указан атрибут, тип переменной итд. В зависимистои от этих параметров формируется форма. Вот вьюха:
Python
1
2
3
4
5
6
7
8
9
 def new_bef(request,case_id):
    if request.method=='POST':
       тут надо обработать и записать в БД.
    else:
        atr=atributes.objects.filter(fortab__icontains="before").order_by('id')
        args={}
        args['case_id']=case_id
        args['atr']=atr
        return render(request,'newbef.html',args)
Вот так это выглядит в шаблоне:
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
39
40
41
42
43
44
45
46
47
48
49
50
{% block content %}
 <h1 align="center">Добавьте состояние пациента до эвакуации для кейса №{{case_id}}</h1>
 <center>
 <form name="formbef" action="" method="post">
   {% csrf_token %}
   {% for a in atr %}
    {% if a.root == 1 %}
    <strong>{{a.nazv}}:</strong><br>
    {% for m in atr %}
     {% if m.roditel == a.pk %}
       {% if m.valtype == 1 %}
       -<input type="checkbox" id="{{m.pk}}" name="{{m.pk}}" onchange="fun1('{{m.antogon}}','{{m.pk}}')">{{m.nazv}}
       {% if m.ispotomok == 1 %}
       :<br>
        {% for t in atr %}
          {% if t.roditel == m.pk %}
          {% if t.valtype == 1 %}
          -<input type="checkbox" id="{{t.pk}}" name="{{t.pk}}" onchange="fun1('{{t.antogon}}','{{t.pk}}')">{{t.nazv}}<br>
          {% elif t.valtype == 2 %}
          -{{t.nazv}} <input type="number" id="{{t.pk}}" name="{{t.pk}}"><br>
          {% elif t.valtype == 3 %}
          -{{t.nazv}} <input type="text" id="{{t.pk}}" name="{{t.pk}}"><br>
          {% elif t.valtype == 4 %}
          -<input type="checkbox" id="{{t.pk}}" name="{{t.pk}}" onchange="fun1('{{t.antogon}}','{{t.pk}}')">{{t.nazv}} <input type="text" id="{{t.pk}}" name="{{t.pk}}"><br>
          {% elif t.valtype == 5 %}
          -<input type="checkbox" id="{{t.pk}}" name="{{t.pk}}" onchange="fun1('{{t.antogon}}','{{t.pk}}')">{{t.nazv}} <input type="number" id="{{t.pk}}" name="{{t.pk}}"><br>
         {% endif %}
          {% endif %}
        {% endfor %}
       {% else %}
       <br>
       {% endif %}
       {% elif m.valtype == 2 %}
       -{{m.nazv}} <input type="number" id="{{m.pk}}" name="{{m.pk}}"><br>
       {% elif m.valtype == 3 %}
       -{{m.nazv}} <input type="text" id="{{m.pk}}" name="{{m.pk}}"><br>
       {% elif m.valtype == 4 %}
       -<input type="checkbox" id="{{m.pk}}" name="{{m.pk}}" onchange="fun1('{{m.antogon}}','{{m.pk}}')">{{m.nazv}} <input type="text" id="{{m.pk}}" name="{{m.pk}}"><br>
       {% elif m.valtype == 5 %}
       -<input type="checkbox" id="{{m.pk}}" name="{{m.pk}}" onchange="fun1('{{m.antogon}}','{{m.pk}}')">{{m.nazv}} <input type="number"  id="{{m.pk}}" name="{{m.pk}}"><br>
      {% endif %}
     {% endif %}
   {% endfor %}
   {% endif %}
   {% endfor %}
   <br>
<button type="submit" name="button">Добавить</button>
 </form>
 
 </center>
Тестовый Проект по адресу http://mis.sibstart.ru login: dima пароль Zds456ake
Переходишь по кнопке текущая эвакуация, в табшите выбираешь состояние до эвакуации, нажимаешь добавить. Там отобразится форма с множеством чекбоксов, которую как раз и надо разпарсить в словарь из запроса после передачи на сервер. Горит дипломная. Хотел через динамические формы, но там не так все просто, да и мало возможностей. Буду благодарен за любую наводку...
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
13.08.2021, 15:03
Имена в html добавь. А то на сервер отправляется какой-то бред:

Code
1
2
3
4
5
6
7
{
    "7": "555",
    "csrfmiddlewaretoken": "tpE6NkJkpKDyEsZjx84ecdBZTn3SBLLLebkBTVpGOay8v5cA0KTKF3XFrzIazY95",
    "2:1": "on",
    "8:3": "ff",
    "button": ""
}
0
6 / 6 / 1
Регистрация: 22.03.2017
Сообщений: 100
17.08.2021, 11:43
Цитата Сообщение от ExFoxer Посмотреть сообщение
в табшите выбираешь состояние до эвакуации, нажимаешь добавить.
что-то нет кнопки "добавить"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.08.2021, 11:43
Помогаю со студенческими работами здесь

Работа с формой
Коллеги, день добрый. Помогите разобраться. Вопрос 1. В результате отработки ниже представленного кода, всегда выводится сообщение...

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

Работа с формой
Подскажите пожалуйста, как ввести на форму число в 16 теричке с помощью кнопки Edit? Например, в одном окошке Edit вводим число, в...

Работа с формой
Нужно сделать, чтобы форма выходила в правом нижнем углу экрана, а также по нажатию кнопки 'mb' сворачивалась, а не изменяла свой размер....

Работа с формой
Разработайте форму, заполняемую пользователем Internet, на произвольную тематику. При этом должны быть использованы все виды элементов,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru