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 для обработки этой сложной системы

Вернуться на верх