Опубликовать Django Formset через AJAX
Здесь новичок в Джанго.
Я использую наборы форм в Django как часть шага в процессе мастера, и я хотел бы отправить их, как только процесс будет завершен (не с помощью классической отправки). Я хотел бы отправить его вместе с другими данными через POST, используя Javascript.
Есть ли другой способ, чем поочередно сериализовать все формы и отправить их в массив json "вручную"? Можно ли отправить их как "formset"?
Пример того, что у меня есть:
в views.py
formset = formset_factory(CustomerForm, extra=customer_number)
return render (request, 'customer/customer_info.html', {'customerformset':formset})
в шаблоне
{% for form in customerformset %}
{{form}}
{% endfor %}
в представленной HTML
<input class="form-control input-sm" maxlength="30" name="form-0-name" placeholder="Name" required="true" type="text">
<input class="form-control input-sm" maxlength="30" name="form-0-surname" placeholder="Surname" required="true" type="text">
<input class="form-control input-sm" maxlength="30" name="form-0-email" placeholder="Email" required="true" type="text">
2 ответа
Хотя формы являются отдельными с точки зрения Django, в HTML они все содержатся в одном и том же <form>
элемент. Таким образом, вы можете сериализовать их за один раз:
data = $('form').serialize();
Обратите внимание, что это не преобразуется в JSON, и в этом нет необходимости: это преобразует значения в обычные данные с кодировкой формы, которые могут быть отправлены напрямую и использованы в Django через стандарт request.POST
,
Вы можете использовать Мастер форм в django, и каждый шаг может иметь совершенно разные классы форм. Информация может храниться либо в файле cookie, либо в сеансе, и после окончательной отправки (и проверки, запомните, как и в любой другой форме) информация будет удалена из сеанса.
class ContactWizard(AccessMixin, NamedUrlSessionWizardView):
Обычно мастер удобен в использовании, однако он может стать довольно сложным, если вы захотите добавить, например, шаги регистрации / входа между ними.