Не возвращаются ли формы в контексте, если они не изменены?
В моем HTML-файле есть кнопка отправки (click_button) для выполнения действий и кнопка отправки для формы Django (form_submit). Все сабмиты перенаправляются на одну View-функцию (get_post_from_submit). При использовании функции return render() я всегда должен вернуть контекст включая форму, но у меня нет информации о форме, когда я нажал на кнопку click_button.
Есть ли способ не возвращать форму снова?
home.html
....
<body>
{% load bootstrap4 %}
<form action="" method="POST" novalidate>
{% csrf_token %}
{% bootstrap_form form %}
</form>
<form action="" method="POST" novalidate>
{% csrf_token %}
<button class="btn btn-primary" name="click_button" type="submit">Grafik</button>
</form>
</body>
....
views.py
def get_post_from_submit(request):
if request.method == 'POST':
if "book_field" in request.POST:
# Do Stuff
form = form_book(request.POST)
if "click_button" in request.POST:
# Do Stuff
# Here the form always gets a reset, because I have no Info about the form in POST but it is needed as context...
form = form_book()
return render(request, 'home.html',{"form": form})
Одним из методов может быть инкапсуляция только одного тега form
в обе секции.
<form action="" method="POST" novalidate>
{% bootstrap_form form %}
<input type="submit" name="action" value="FormSubmit"/>
{% csrf_token %}
<input type="submit" name="action" value="Grafik"/>
</form>
Используя name="action"
, вы можете дифференцировать действие POST в представлении следующим образом:
def get_post_from_submit(request):
if request.method == 'POST':
form = form_book(request.POST)
if request.POST['action'] == 'FormSubmit':
[...]
elif request.POST['action'] == 'Grafik':
[...]
return render(request, 'home.html',{"form": form})
form_book
не сможет сохранить данные формы всякий раз, когда в представление отправляется тип Grafik
POST.