Форма Django, использующая model_formset, не отправляется

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

Для этого я использовал modelformsets, а также скопировал html из ответа на другой вопрос, чтобы формы отображались в линию (см. ниже).

enter image description here

Html шаблон:

               <div class="card-body">
              <form action="{% url 'bugtracker:users' %}" method='POST'>
                <table id="formset" class="form">
                  {{ formset.non_form_errors.as_ul }}
                  {{ formset.management_data }}
                  {% csrf_token %}
                  {% for form in formset.forms %}
                  {% if forloop.first %}
                <thead><tr>
                  {% for field in form.visible_fields %}
                  <th>{{ field.label|capfirst }}</th>
                  {% endfor %}
                </tr></thead>
                {% endif %}
                <tr class="{% cycle 'row1' 'row2' %}">
                  {% for field in form.visible_fields %}
                  <td>
                    {# Include the hidden fields in the form #}
                    {% if forloop.first %}
                    {% for hidden in form.hidden_fields %}
                    {{ hidden }}
                    {% endfor %}
                    {% endif %}
                    {{ field.errors.as_ul }}
                    {{ field }}
                  </td>
                  {% endfor %}
                </tr>
                {% endfor %}
              </table>
              <button class="btn btn-primary" type="submit">Submit</button>
            </form>
            </div>

Вид:

@login_required
def users(request):
    # users = User.objects.all()
    UserFormSet = modelformset_factory(User,fields=('username','first_name','last_name','email','is_contributor','is_projectmanager','is_administrator'), extra=0)
    if request.method == 'POST':
        formset = UserFormSet(request.POST or None)
        print(formset)
        if formset.is_valid():
            formset.save(commit=True)
            messages.success(request,f"save successfull")
            return HttpResponseRedirect(reverse("bugtracker:users"))
        else:
            print("error")
            for form in formset:
                print(form.cleaned_data) 
            messages.success(request,f"error")
            return HttpResponseRedirect(reverse("bugtracker:users"))

    formset = UserFormSet()
    context = {
        # 'users':users,
        'formset':formset,
    }
    return render(request, 'bugtracker_app/users.html', context)

Я обнаружил, что форма не действительна и поэтому не сохраняется. form.clean_data выглядит следующим образом:

<tr><td colspan="2"><ul class="errorlist nonfield"><li>(Hidden field TOTAL_FORMS) This field is required.</li><li>(Hidden field INITIAL_FORMS) This field 
is required.</li></ul><input type="hidden" name="form-TOTAL_FORMS" id="id_form-TOTAL_FORMS"><input type="hidden" name="form-INITIAL_FORMS" id="id_form-INITIAL_FORMS"><input type="hidden" name="form-MIN_NUM_FORMS" id="id_form-MIN_NUM_FORMS"><input type="hidden" name="form-MAX_NUM_FORMS" id="id_form-MAX_NUM_FORMS"></td></tr>

Это мой первый опыт работы с модельными наборами форм или наборами форм вообще. Не мог бы кто-нибудь сказать мне, почему моя форма не сохраняется должным образом, и как я могу изменить свой код, чтобы сохранить форму моей таблицы, но при этом сохранить все записи при нажатии кнопки submit?

Я нашел ответ:

В шаблоне я набрал {{ formset.management_data }}, который должен был быть {{ formset.management_form }}. Документация, которую я использовал, находится здесь

Мне также пришлось переместить {{ formset.management_form }} в теги таблицы.

Полный рабочий HTML здесь:

          <form action="{% url 'bugtracker:users' %}" method='POST'>
            <table id="formset" class="form">
              {{ formset.management_form }}
              {{ formset.non_form_errors.as_ul }}
              {% csrf_token %}
              {% for form in formset.forms %}
                {% if forloop.first %}
                <thead><tr>
                  {% for field in form.visible_fields %}
                    <th>{{ field.label|capfirst }}</th>
                  {% endfor %}
                </tr></thead>
                {% endif %}
              <tr class="{% cycle 'row1' 'row2' %}">
                {% for field in form.visible_fields %}
                <td>
                  {# Include the hidden fields in the form #}
                  {% if forloop.first %}
                    {% for hidden in form.hidden_fields %}
                      {{ hidden }}
                    {% endfor %}
                  {% endif %}
                  {{ field.errors.as_ul }}
                  {{ field }}
                </td>
                {% endfor %}
              </tr>
              {% endfor %}
          </table>
          <button class="btn btn-primary" type="submit">Submit</button>
        </form>
Вернуться на верх