Рассмотрим базовую форму Джанго:
from django import forms
class TestForm(forms.Form):
first_name = forms.CharField(max_length=50)
last_name = forms.CharField(max_length=50)
Когда вы передаете эту форму request.POST
, как в TestForm(request.POST)
, она получает экземпляр QueryDict
из запросов form
(s):
from django.http.request import QueryDict
qd = QueryDict(mutable=True)
qd["first_name"] = "Brad"
qd["last_name"] = "Solomon"
TestForm(qd).is_valid()
# True
Но теперь я хотел бы обработать несколько похожих на строки повторений этих двух полей:
<form method="POST" action="/some/endpoint">
<input type="text" name="first_name">
<input type="text" name="last_name">
<br>
<input type="text" name="first_name">
<input type="text" name="last_name">
<input type="submit" value="OK">
</form>
* 1014 Т.е. *
![enter image description here](https://i.stack.imgur.com/I2Fez.png)
Как правильно перебрать каждую из этих очищенных и проверенных (first_name
, last_name
) пар?
Если я передам все это TestForm
, тогда .cleaned_data
берет только последнюю увиденную пару:
>>> qd = QueryDict(mutable=True)
... qd.setlist("first_name", ["Brad", "Joe"])
... qd.setlist("last_name", ["Solomon", "Smith"])
>>> form = TestForm(qd)
>>> form.is_valid()
True
>>> form.cleaned_data
{'first_name': 'Joe', 'last_name': 'Smith'}
(Для чего бы это ни стоило, имеет смысл показывать только последнее значение, потому что это имитирует поведение QueryDict
. Однако я хотел бы получить доступ ко всем значениям, а не только к последним увиденным.)