Django множественная форма, разделенная в html, объединяется снова с помощью submit
существует такая модель, как:
class foo(forms.ModelForm):
a = forms.BooleanField(label='a', required=False)
b = forms.BooleanField(label='b', required=False)
c = forms.BooleanField(label='c', required=False)
d = forms.BooleanField(label='d', required=False)
e = forms.BooleanField(label='e', required=False)
f = forms.BooleanField(label='f', required=False)
g = forms.BooleanField(label='g', required=False)
h = forms.BooleanField(label='h', required=False)
#...
далее существует несколько экземпляров foo в списке:
L = []
L.append(foo(instance=object_1))
L.append(foo(instance=object_2))
L.append(foo(instance=object_3))
#...
L.append(foo(instance=object_n))
это отображается на html в разных таблицах в разных колонках. Теперь проблема заключается в том, чтобы правильно отправить данные обратно с субмитом. Мне нужно правильно соединить таблицы и строки. Я думал о чем-то вроде этого:
<form class="form-inline" action ="{% url 'bla:blo' %}" method="post">
Table #1
| ID of Form | Value #1 | Value #2 | Value #3 | Value #4 |
| ---------- | -------- | -------- | -------- | -------- |
<form id=1>| 1 | a1 | b1 | c1 | d1 |</form>
<form id=2>| 2 | a2 | b2 | c2 | d2 |</form>
<form id=3>| 3 | a3 | b3 | c3 | d3 |</form>
<form id=4>| 4 | a4 | b4 | c4 | d4 |</form>
Table #2
| ID of Form | Value #1 | Value #2 | Value #3 | Value #4 |
| ---------- | -------- | -------- | -------- | -------- |
<form id=1>| 1 | e1 | f1 | g1 | h1 |</form>
<form id=2>| 2 | e2 | f2 | g2 | h2 |</form>
<form id=3>| 3 | e3 | f3 | g3 | h3 |</form>
<form id=4>| 4 | e4 | f4 | g4 | h4 |</form>
{% csrf_token %}
<button type="submit" class="btn btn-dark">Save</button>
</form>
т.е. строки таблицы с одинаковым id формы должны быть преобразованы обратно в одну и ту же форму django.
тогда, конечно, сабмит должен быть принят в view.py
вроде того
def boo(request):
if request.method == 'POST':
if form.is_valid():
f = foo(request.POST):
# f[0] = form id 1
# f[1] = form id 2
# f[2] = form id 3
# ...
# f[n] = form id n
Вы можете только отправить несколько форм через контекст, но получить данные всех этих форм с помощью другой формы-обертки будет невозможно. Вы можете видеть только список форм, но получить данные с помощью post-запросов для всех форм не удастся.
def boo(request):
if request.method == 'GET':
form_list = []
object_list = [] # YOUR_OBJECT_LIST
for instance in object_list:
form_list.append(foo(instance=instance))
return render("footemplate.html", context={"forms": form_list})
if request.method == "POST":
<form>
{% csrf_token %}
{% for form in forms %}
{{ form }}
{% endfor %}
</form>
Для отправки всех данных формы через пост запрос, я предлагаю использовать javascript и ajax. а для backend части, используйте RestfulAPI для обработки этой сложной системы