Django forms.MultipleChoiceField只选择一个值

Bru*_*ger 7 python django

我有一个只有一个字段的表单MultipleChoiceField.在模板中它被印有其它两种形式是ModelForm相同的HTML表格内秒(如所描述的在这里).

当读取POST视图中的所有数据时,一切都在那里并且正常工作,除了来自此的MultipleChoiceField值,如果直接从中选择它,则仅显示表格中的最后一个选定值request.POST['field']- 但有趣的是,如果我打印request.POST,则选择所有内容在那儿.这怎么可能?这真让我大吃一惊.

这是形式:

class EstadosAtendidosForm(forms.Form):
    estadosSelecionados = forms.MultipleChoiceField(choices = choices.UF.list)
Run Code Online (Sandbox Code Playgroud)

这是观点:

@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})
Run Code Online (Sandbox Code Playgroud)

这是模板:

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

从第5行到第10行,视图中打印的输出如下:

<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'test@email.com']}>
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'test@email.com']}>
S
P
Run Code Online (Sandbox Code Playgroud)

看到变量estadosSelecionados确实包含我从表单中选择的3个值,正确地,作为列表,当我打印整个request.POST数据时,但是当我打印时request.POST['estadosSelecionados'],它没有.

为什么?我真的需要帮助来理解这一点.谢谢.

Pet*_*per 6

POST是一个QueryDict对象,当在HTTP POST中为同一个密钥提交多个值时,该对象具有特殊行为.要获得所有这些,请使用该getlist方法.或者,只需使用您的表单 - 表单字段将为您收集多个值.