Я хочу написать представление, которое отображает несколько форм, по одному для каждого экземпляра модели, возвращаемого объектным запросом. Таким образом, пользователь может заполнить сразу несколько форм, а затем данные для всех объектов будут сохранены на POST
. Вот что у меня есть:Django Multiple Form Submission: одна форма, переписывающая все объекты формы
Вид:
def formView(request, attr):
object_list = MyModel.objects.filter(attribute1=attr)
if request.method == 'POST':
form_list = [MyModelForm(request.POST, instance=x) for x in object_list]
if all(form.is_valid for form in form_list):
for form in form_list:
form.save()
return HttpResponseRedirect('/thanks/')
else:
form_list = [MyModelForm(instance=x) for x in object_list]
return render(request, 'formView.html', {'form_list':form_list})
HTML:
<table>
<thead>
<tr>
<th>Field1</th>
<th>Field2</th>
<th>Field3</th>
</tr>
</thead>
<tbody>
{% for form in form_list %}
<tr>
<form method="post">{% csrf_token %}
{% for field in form %}
<td>{{ field }}</td>
{% endfor %}
<td><input type="submit" value="Submit" /></td>
</form>
</tr>
{% endfor %}
</tbody>
</table>
Поправьте меня, если я ошибаюсь, но вот что я думаю, что мой код в настоящее время делает: когда пользователь заполняет вне формы на странице, а затем нажимает на одну из кнопок Submit
, форма, соответствующая этой кнопке Submit
, отправляет только мои данные на мое представление, которое затем продолжает сохранять эти данные во всех формах в form_list
, тем самым записывая эти же данные в все соответствующие объекты в моей базе данных (что явно не то, что я хочу).
Что бы я хотел, это что-то вроде одной кнопки Submit
для всей страницы, так что данные для каждой формы на странице отправляются обратно со связанной формой и сохраняются в соответствующем соответствующем объекте в базе данных. Это возможно?
браузер будет отправлять только форму вашего кнопки отправки связана с и не представит другие. Это просто поведение браузера W3C. Следовательно, каждый '