Форум сайта python.su
Здравствуйте!
На одной странице отрендерены несколько форм, различных классов, образованных от forms.Form.
<form action="{% url 'app:route' parameter %}" method="post"> {% for q_form in q_forms %} {% csrf_token %} <div class="row form-row spacer"> {{ q_form.name.value }} <div class="input-group">{{ q_form.ans }}</div> </div> {% endfor %} <button type="submit">ПРИНЯТЬ</button> </form>
Отредактировано Alex.py (Янв. 14, 2021 10:45:27)
Офлайн
Фактически, вам надо, чтобы по имени конкретного контрола формы, можно было понять, какой форме он принадлежит. То есть надо каким-то образом поместить информацию о форме в аттрибут name. Я бы на вашем месте долго не думал, и использовал префиксы.
https://docs.djangoproject.com/en/3.1/ref/forms/api/#prefixes-for-forms
Офлайн
Немного непонятно как это правильно сделать…
Таким образом поместив в один тег “form” несколько форм трёх классов, назначив им prefix из, допустим {'classForm1', ‘classForm2’, ‘classForm3’}, мы добиваемся их обработки одним контроллером, используя для этого namespace по имени prefix?
appname/classForm1_urls.py:
from django.urls import re_path from . import views app_name = 'appname' urlpatterns = [ re_path(r'^somepath/(?P<parameter>[-+]?\d+)/$', views.saving_qforms, name='route'), ]
from django.urls import re_path from . import views app_name = 'appname' urlpatterns = [ re_path(r'^somepath/(?P<parameter>[-+]?\d+)/$', views.saving_qforms, name='route'), ]
from django.urls import re_path from . import views app_name = 'appname' urlpatterns = [ re_path(r'^somepath/(?P<parameter>[-+]?\d+)/$', views.saving_qforms, name='route'), ]
from django.urls import path, include urlpatterns = [ path('somepath/', include('classForm1_urls', namespace='classForm1')), path('somepath/', include('classForm2_urls', namespace='classForm2')), path('somepath/', include('classForm3_urls', namespace='classForm3')), ]
<form action="{% url 'appname:route' parameter %}" method="post"> {% for q_form in q_forms %} {% csrf_token %} <div class="row form-row spacer" name="{{ q_form.prefix }}"> {{ q_form.name.value }} <div class="input-group">{{ q_form.ans }}</div> </div> {% endfor %} <button type="submit">ПРИНЯТЬ</button> </form>
Отредактировано Alex.py (Янв. 14, 2021 16:24:19)
Офлайн
Alex.pyВам конкретно что надо, чтобы поля нескольких форм отправлялись одним запросом, или чтобы они отправлялись в разных рапросах, но обрабатывались одной вьюшкой?
мы добиваемся их обработки одним контроллером
Офлайн
FishHookДа, я хочу каждую форму обработать отдельно, ибо данные каждой формы это основа одного создаваемого экземпляра модели. Но отправка всех форм клиентом по нажатию одной кнопки, отправляя тем самым все заполненные формы на один контроллер. Это возможно?
или чтобы они отправлялись в разных рапросах, но обрабатывались одной вьюшкой?
Офлайн
Камрад, я нифига не понимаю, чего ты хочешь.
Alex.pyОк, то есть все данные со всех форм уходят одним запросом.
отправляя тем самым все заполненные формы
Alex.pyНо при этом они должны обрабатываться как-то “отдельно”, что бы это не значило. Это как понять то?
Да, я хочу каждую форму обработать отдельно
Офлайн
FishHook
Ок, то есть все данные со всех форм уходят одним запросом.
<form action="/briefing/results/2/" id="1" method="post"> <div class="row form-row spacer"> <p>Название</p> <div class="input-group"><ul id="id_Variant_Ans-ans"> <li><label for="id_Variant_Ans-ans_0"><input type="checkbox" name="Variant_Ans-ans" value="97" id="id_Variant_Ans-ans_0"> вариант 1</label> </li> <li><label for="id_Variant_Ans-ans_1"><input type="checkbox" name="Variant_Ans-ans" value="98" id="id_Variant_Ans-ans_1"> вариант 2</label> </li> </ul></div> </div> <input type="submit" style="display:none"> </form> <form action="/briefing/results/2/" id="2" method="post"> <input type="hidden" name="csrfmiddlewaretoken" value="QblveCfhWakAm1xeSU5srBZia5hKNSv8LEgNOR7sJVdioPM7QsgD2uDQn6A3hwbp"> <div class="row form-row spacer"> <p>Название2[quote=FishHook]Ок, то есть все данные со всех форм уходят одним запросом.[/quote] </p> <div class="input-group"><textarea name="Text_Ans-ans" cols="40" rows="10" required="" id="id_Text_Ans-ans"></textarea></div> </div> <input type="submit" style="display:none"> </form> <input type="button" id="sendAll" value="ПРИНЯТЬ"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script type="text/javascript"> $("#sendAll").click(function(){ for (var i = 1; i <= {{ q_forms|length }}; i++){ $("#" + i).submit(); } }); </script>
Отредактировано Alex.py (Янв. 15, 2021 15:39:57)
Офлайн
Alex.py
Я все-таки не понимаю, зачем тут jquery. Допустим, у меня есть такой HTML
<form> {# form 1 #} <input name='form1__field1' /> <input name='form1__field2' /> {# form 2 #} <input name='form2__field1' /> <input name='form2__field2' /> {# form 3 #} <input name='form3__field1' /> <input type=''submit" /> </form>
Отредактировано FishHook (Янв. 15, 2021 20:39:42)
Офлайн
FishHook
В кверисете вы получите словарь со всеми этими филдами и можете поставлять его в конструктор форм, формы сами разберуться с префиксами.
Офлайн
Alex.py
У вас вопрос еще остался? Я правда не понимаю ваших затруднений
Офлайн