Ich habe ein Formular mit nur einem Feld, das eine MultipleChoiceField
ist. In der Vorlage wird es mit zwei anderen Formularen gedruckt, die ModelForm
s im selben HTML-Formular sind (wie beschrieben here).Django forms.MultipleChoiceField wählt nur einen Wert
Wenn alle der POST
Daten in der Ansicht zu lesen, alles ist da und korrekt funktioniert mit Ausnahme der Werte aus dieser MultipleChoiceField
, die nur den zuletzt gewählten Wert aus dem Formular es, wenn die Auswahl direkt aus request.POST['field']
gezeigt wird - aber interessant genug Wenn ich request.POST
drucke, ist alles ausgewählt. Wie ist das möglich? Das verwirrt mich wirklich.
Dies ist die Form:
class EstadosAtendidosForm(forms.Form):
estadosSelecionados = forms.MultipleChoiceField(choices = choices.UF.list)
die Ansicht Dies ist:
@login_required
@csrf_protect
def cadastro_transportadora(request):
if request.method == 'POST':
print request.POST
print len(request.POST['estadosSelecionados'])
print request.POST
estadosSelecionados = request.POST['estadosSelecionados']
for estado in estadosSelecionados:
print estado
form_end = EnderecoForm(request.POST)
form_transp = TransportadoraForm(request.POST)
else:
transportadora_form = TransportadoraForm()
endereco_form = EnderecoForm()
estados_form = EstadosAtendidosForm()
return render(request, 'transporte/transportadora/cadastro.html', {'transportadora_form': transportadora_form, 'endereco_form': endereco_form, 'estados_form': estados_form})
Und das ist die Vorlage:
{% extends "transporte/base.html" %}
{% block main %}
<h1>Cadastro de Transportadora</h1>
<form enctype="multipart/form-data" action="" method="POST">
{% csrf_token %}
<h4>Dados da transportadora</h4>
{{ transportadora_form.as_p }}
<h4>Endereço</h4>
{{ endereco_form.as_p }}
<h4>Estados atendidos</h4>
{{ estados_form.as_p }}
<input type="submit" />
</form>
{% endblock %}
Die Ausgabe des Drucks in der Ansicht, seit Zeile 5 bis 10, ist wie folgt:
<QueryDict: {u'nome': [u'Test name'], u'bairro': [u'Estrela'], u'logradouro': [u'R. SHudhsu'], u'numero': [u'234'], u'estadosSelecionados': [u'AM', u'RJ', u'SP'], u'telefone': [u'+559965321232'], u'cep': [u'88088888'], u'csrfmiddlewaretoken': [u'mQhxZlbosISw4acZOmTWw6FpaQPwg2lJ'], u'estado': [u'AM'], u'email': [u'[email protected]']}>
2
<QueryDict: {u'nome': [u'Test name'], u'bairro': [u'Estrela'], u'logradouro': [u'R. SHudhsu'], u'numero': [u'234'], u'estadosSelecionados': [u'AM', u'RJ', u'SP'], u'telefone': [u'+559965321232'], u'cep': [u'88088888'], u'csrfmiddlewaretoken': [u'mQhxZlbosISw4acZOmTWw6FpaQPwg2lJ'], u'estado': [u'AM'], u'email': [u'[email protected]']}>
S
P
Sehen Sie, dass die Variable estadosSelecionados
wirklich die 3 Werte enthält, die ich aus dem Formular richtig als Liste ausgewählt habe, wenn ich die gesamten request.POST
Daten drucke, aber wenn ich nur request.POST['estadosSelecionados']
drucke, tut es das nicht.
Warum? Ich brauche wirklich Hilfe, um das zu verstehen. Vielen Dank.