В проекте реализована страница с формами. Одна из формы является динамической (DogFormSet) , дублирование идет за счет js скрипта.
Все функции сохранения данных из форм разделены по именам, чтобы django понимал какую именно форму нужно сохранять.
Отдельное сохранение динамической формы (DogFormSet) работает корректно и не вызывает ошибок.
Но при сохранении данных из других форм я получаю error на динамической форме (после обновления страницы форма пропадает и я получаю такие ошибки:
(Скрытое поле TOTAL_FORMS) Обязательное поле.
(Скрытое поле INITIAL_FORMS) Обязательное поле.)
Не смотря на ошибки данные из других форм сохраняются.
мой views.py:
class dogaddview(TemplateView):
template_name = 'main/dogsform.html'
def get(self, request, *args, **kwargs):
form2 = SpeedsForms()
formset = DogFormSet(queryset=dog.objects.none())
form4 = ColorForms()
form5 = DogRequestsForm()
datas = {
'form2': form2,
'DogFormSet': formset,
'form4': form4,
'form5': form5,
}
return render(request, 'main/dogsform.html', datas)
def post(self, request, *args, **kwargs):
form2 = SpeedsForms(request.POST)
formset = DogFormSet(request.POST)
form4 = ColorForms(request.POST)
form5 = DogRequestsForm(request.POST)
if 'speed' and form2.is_valid():
form2.save()
if 'dogs' and formset.is_valid():
formset.save()
if 'color' and form4.is_valid():
form4.save()
if 'Req' and form5.is_valid():
form5.save()
data = {
'form2': form2,
'formset': formset,
'form4': form4,
'form5': form5,
}
return self.render_to_response(data)
мой html:
{% block content %}
<div class="features">
<form method="post">
{% csrf_token %}<br>
{{ form4.as_p }}<br>
<button class="btn btn-success" type="submit" name="color">Сохранить</button>
</form>
<form method="post">
{% csrf_token %}<br>
{{ form2.as_p }}
<button class="btn btn-success" type="submit" name="speed">Сохранить</button>
</form>
<form id="form-container" method="post">
{% csrf_token %}<br>
{{DogFormSet.management_form}}
<div class="DogForm">
{{ formset.as_p }}<br>
</div>
<button id="add-form" type="button">Add Another dogs</button>
<button class="btn btn-success" type="submit" name="dogs">Сохранить</button>
</form>
<form method="post">
{% csrf_token %}<br>
{{ form5.as_p }}<br>
<button class="btn btn-success" type="submit" name="Req">Сохранить</button>
</form>
</div>
<script>
let DogForm= document.querySelectorAll(".DogForm")
let container = document.querySelector("#form-container")
let addButton = document.querySelector("#add-form")
let totalForms = document.querySelector("#id_form-TOTAL_FORMS")
let formNum = DogForm.length-1
addButton.addEventListener('click', addForm)
function addForm(e){
e.preventDefault()
let newForm = DogForm[0].cloneNode(true)
let formRegex = RegExp(`form-(\\d){1}-`,'g')
formNum++
newForm.innerHTML = newForm.innerHTML.replace(formRegex, `form-${formNum}-`)
container.insertBefore(newForm, addButton)
totalForms.setAttribute('value', `${formNum+1}`)
}
</script>
{% endblock %}
Как мне избежать выявления данной ошибки при сохранении данных из других форм?