Django Polls-App: динамическое изменение количества вариантов в create-poll-form
После прохождения учебника Django для начинающих мне удалось создать форму для создания нового опроса с несколькими вариантами выбора. Теперь я хочу добавить кнопку, которая добавляет еще одно текстовое поле для другого выбора. Я новичок в веб-разработке, и мне сложно передавать переменные из шаблонов в представления. Я прочитал здесь: Passing variable from django template to view, что есть по сути 4 способа сделать это. Сейчас я использую вариант №3 для указания количества отображаемых вариантов, но я уверен, что вариант №1 будет более элегантным, так как количество вариантов не будет отображаться в url. Вот мой текущий код:
{% extends "base.html" %}
{% block content %}
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static "polls/style.css" %}">
<form method="POST" enctype="multipart/form-data"> {% csrf_token %}
{{ form.as_p }}
{{ choice_forms.management_data }}
<div class="pollschoice">{{ choice_forms.as_ul }}</div>
<a href="{% url "polls:create" nr_of_choices|add:1 %}"><input type="button", value="Add Choice"> </a>
<a href="{% url "polls:create" nr_of_choices|add:-1 %}"><input type="button", value="Remove Choice"> </a>
<input type="submit", value="Save" />
</form>
{% endblock %}
def createview(request, nr_of_choices):
# initialize forms
nr_of_choices = max(nr_of_choices, 1)
form = QuestionForm(request.POST or None)
choiceFormSet = formset_factory(ChoiceForm, extra=nr_of_choices)
choice_forms = choiceFormSet(request.POST or None)
# save question to get question id
if form.is_valid():
form.save()
valid_choices = 0
for choice_form in choice_forms:
if choice_form.is_valid():
# create choice instance
try:
valid_choices += 1
c = Choice( question=Question.objects.last(),
choice_text=choice_form.cleaned_data["choice_text"],
votes=choice_form.cleaned_data["votes"]
)
c.save()
except KeyError:
pass
if not valid_choices and form.is_valid():
Question.objects.last().delete()
else:
form = QuestionForm()
choice_form = choiceFormSet()
context = {
"form": form,
"choice_forms": choice_forms,
"nr_of_choices": nr_of_choices,
}
return render(request, "polls/create.html", context)
И в моих url-шаблонах я получил эту строку: path("create/<int:nr_of_choices>", views.createview, name="create")
Как мне изменить параметр nr_of_choices моего представления с помощью кнопки в HTML-коде без изменения url?