Как получить данные формы DJango, которые были добавлены?
Как получить данные всех строк формы, которые были добавлены? У меня есть форма с 5 номерами в строке, и некоторое 'N' количество строк, выбранных пользователем, добавляется.
Форма:
class locker(forms.Form):
num0 = forms.IntegerField(label='', min_value=1, max_value=25, required=True)
num1 = forms.IntegerField(label='', min_value=1, max_value=25, required=True)
num2 = forms.IntegerField(label='', min_value=1, max_value=25, required=True)
num3 = forms.IntegerField(label='', min_value=1, max_value=25, required=True)
num4 = forms.IntegerField(label='', min_value=1, max_value=25, required=True)
Вид:
# Render form
...
count = 3
newForm = locker()
context.update({ 'locker': newForm, 'lockerCount': range(count) })
...
Шаблон:
# Display form
...
<div class="lockers">
<form name="longForm" action="" method="post">
{% csrf_token %}
{% for i in lockerCount %}
{{ locker }}<br />
{% endfor %}
<br />
<input type="submit" value="submit" class="small-button">
</form>
</div>
...
Я пробовал различные методы, найденные в google, и самое близкое, что я получил, это:
...
data = form.cleaned_data.items()
for q in data:
...
но он получает только последний ряд чисел. Если посмотреть на консоль, то я вижу все данные (ниже). Я пытаюсь получить все строки формы, каждая из которых содержит 5 наборов целых чисел. Пожалуйста, помогите.
[29/Sep/2022 23:19:42] "POST /main/ HTTP/1.1" 200 10113
[29/Sep/2022 23:20:43] "GET /main/?csrfmiddlewaretoken=w3YIsEf1Af2hX4IRfPIVShZCdUjh9EEnbu2o8UGbI8XFbcTif6f1FlviC3KoHDM8&num0=7&num1=6&num2=21&num3=5&num4=11&num0=22&num1=4&num2=6&num3=19&num4=10&num0=9&num1=14&num2=20&num3=3&num4=25 HTTP/1.1" 200 7687
Разобрался. Я неправильно отображал форму. Использование 'formset_factory' для создания набора форм решило эту проблему.
Вид:
# Render form
...
count = 3
lockerSet = formset_factory(locker, extra=count, max_num=10)
context.update({ 'lockerSet': lockerSet })
...
Шаблон:
# Display form
...
<div class="lockers">
<form name="longForm" action="" method="post">
{% csrf_token %}
{{ lockerSet.management_form }}
{% for form in lockerSet %}
{{ form }}<br />
{% endfor %}
<br />
<input type="submit" value="submit" class="small-button">
</form>
</div>
...
Затем я смог получить доступ ко всем данным следующим образом:
lockerSet = formset_factory(locker, extra=count, max_num=10)
formSet = formset(request.POST)
if formSet.is_valid():
for form in formSet:
m0 = form.cleaned_data['num0']
m1 = form.cleaned.data['num1']
...