2014-02-10 65 views
6

我有一個表格只有一個字段,它是一個MultipleChoiceField。在模板中,它正在使用同一HTML表單(如描述的here)內的另外兩個表單ModelForm打印。Django forms.MultipleChoiceField只選擇一個值

當閱讀完所有的視圖中的數據POST的,一切都在那裏,只是從這個MultipleChoiceField,這是從形式,如果從request.POST['field']直中選擇只顯示最後選定值的值正常工作 - 但足夠有趣,如果我打印request.POST,選中的所有內容都在那裏。這怎麼可能?這真令我困惑。

這是以下形式:

class EstadosAtendidosForm(forms.Form): 
    estadosSelecionados = forms.MultipleChoiceField(choices = choices.UF.list) 

這是視圖:

@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}) 

而這是模板:

{% 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 %} 

從打印視圖中的輸出,自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'[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 

當我打印整個request.POST數據時,看到變量estadosSelecionados確實包含我從表格中正確選擇的3個值,但是當我僅打印request.POST['estadosSelecionados']時,它沒有。

爲什麼?我真的需要幫助來理解這一點。謝謝。

回答

5

POST是一個QueryDict對象,當在HTTP POST中爲同一個鍵提交多個值時,該對象具有特殊行爲。要獲得所有這些,請使用getlist方法。或者,只需使用您的表單 - 表單字段將爲您收集多個值。

0

你不應該在request.POST看。使用表單的關鍵在於它處理類型轉換等事情。檢查form.is_valid()後,查看form.cleaned_data['estadosSelecionados']