使用Post方法python django的多值DictKeyError

使用Post方法python django的多值DictKeyError,python,django,templates,bootstrap-4,Python,Django,Templates,Bootstrap 4,我有一个表单,用户选择了一种颜色,这个值返回给我,但是当用户选择颜色时,返回多值DictKeyError,我不知道为什么 以下是我的看法: def primeira_pergunta(request): trans = Tranfer() my_list = trans.shared[0] respostaum = ['amarelo', 'vermelho', 'roxo', 'cinza'] selecionada = 'amarelo' if req

我有一个表单,用户选择了一种颜色,这个值返回给我,但是当用户选择颜色时,返回多值DictKeyError,我不知道为什么

以下是我的看法:

def primeira_pergunta(request):
    trans = Tranfer()
    my_list = trans.shared[0]
    respostaum = ['amarelo', 'vermelho', 'roxo', 'cinza']
    selecionada = 'amarelo'
    if request.method == 'POST':
        respostaum = request.POST['respostaum']
        selecionada = request.POST['selecionada']
    #if selecionada != 'Escolha uma':
        f = Cheiro.objects.get(pk=my_list)
        u = f.pk
        f.resposta1 = selecionada
        f.save()
    else:
        selecionada = 'Escolha uma'

    context = {'respostaum': respostaum, 'selecionada': selecionada}

    return render(request, 'cheiro/primeira_pergunta.html', context)
这是我的模板:

<form method="POST">
    {% csrf_token  %}

    <label for="respostaum">Selecione unidade</label>
    <select class="form-control" id="respostaum" name="respostaum">
        {% for selecionada in respostaum %}
        <option value="{{ selecionada }}">{{ selecionada }}</option>
        {% endfor %}
    </select>
    <input type="submit">

</form>

问题在于
request.POST['selecionada']
不是表单字段。 您的表单只有一个字段:

试试这个:

if request.method == 'POST':
    respostaum = request.POST['respostaum']
    # removed selecionada = request.POST['selecionada']
# if respostaum != 'Escolha uma':
    f = Cheiro.objects.get(pk=my_list)
    u = f.pk
    f.resposta1 = selecionada
    f.save()
else:
或者另一个选项是,如果希望将返回的数据命名为
selecionada
,则可以如下重命名表单字段:

# template
<label for="selecionada ">Selecione unidade</label>
<select class="form-control" id="selecionada " name="selecionada ">
    {% for selecionada in respostaum %}
    <option value="{{ selecionada }}">{{ selecionada }}</option>
    {% endfor %}
</select>
<input type="submit">


# views.py
def primeira_pergunta(request):
   trans = Tranfer()
   my_list = trans.shared[0]
   respostaum = ['amarelo', 'vermelho', 'roxo', 'cinza']
   selecionada = 'amarelo'
   if request.method == 'POST':
       selecionada = request.POST['selecionada']
   # if selecionada != 'Escolha uma':
       f = Cheiro.objects.get(pk=my_list)
       u = f.pk
       f.resposta1 = selecionada
       f.save()
   else:
       selecionada = 'Escolha uma'

context = {'respostaum': respostaum, 'selecionada': selecionada}

return render(request, 'cheiro/primeira_pergunta.html', context)
#模板
独角莲
{Respostatum%中的Seleconada为%1}
{{seleconada}}
{%endfor%}
#views.py
def primeira_pergunta(请求):
trans=transfer()
我的列表=事务共享[0]
呼吸量=['amarelo'、'vermelho'、'roxo'、'cinza']
selecionada='amarelo'
如果request.method==“POST”:
selecionada=request.POST['selecionada']
#如果Seleconada!='埃斯科拉乌马:
f=Cheiro.objects.get(pk=my_列表)
u=f.pk
f、 resposta1=自交系
f、 保存()
其他:
selecionada='Escolha uma'
上下文={'respostaum':respostaum'selecionada':selecionada}
返回呈现(请求'cheiro/primeira_pergunta.html',上下文)

问题在于
请求.POST['selecionada']
不是表单字段。 您的表单只有一个字段:

试试这个:

if request.method == 'POST':
    respostaum = request.POST['respostaum']
    # removed selecionada = request.POST['selecionada']
# if respostaum != 'Escolha uma':
    f = Cheiro.objects.get(pk=my_list)
    u = f.pk
    f.resposta1 = selecionada
    f.save()
else:
或者另一个选项是,如果希望将返回的数据命名为
selecionada
,则可以如下重命名表单字段:

# template
<label for="selecionada ">Selecione unidade</label>
<select class="form-control" id="selecionada " name="selecionada ">
    {% for selecionada in respostaum %}
    <option value="{{ selecionada }}">{{ selecionada }}</option>
    {% endfor %}
</select>
<input type="submit">


# views.py
def primeira_pergunta(request):
   trans = Tranfer()
   my_list = trans.shared[0]
   respostaum = ['amarelo', 'vermelho', 'roxo', 'cinza']
   selecionada = 'amarelo'
   if request.method == 'POST':
       selecionada = request.POST['selecionada']
   # if selecionada != 'Escolha uma':
       f = Cheiro.objects.get(pk=my_list)
       u = f.pk
       f.resposta1 = selecionada
       f.save()
   else:
       selecionada = 'Escolha uma'

context = {'respostaum': respostaum, 'selecionada': selecionada}

return render(request, 'cheiro/primeira_pergunta.html', context)
#模板
独角莲
{Respostatum%中的Seleconada为%1}
{{seleconada}}
{%endfor%}
#views.py
def primeira_pergunta(请求):
trans=transfer()
我的列表=事务共享[0]
呼吸量=['amarelo'、'vermelho'、'roxo'、'cinza']
selecionada='amarelo'
如果request.method==“POST”:
selecionada=request.POST['selecionada']
#如果Seleconada!='埃斯科拉乌马:
f=Cheiro.objects.get(pk=my_列表)
u=f.pk
f、 resposta1=自交系
f、 保存()
其他:
selecionada='Escolha uma'
上下文={'respostaum':respostaum'selecionada':selecionada}
返回呈现(请求'cheiro/primeira_pergunta.html',上下文)

视图.py中尝试此代码,保持模板不变(如问题所示):


views.py
中尝试此代码,保持模板不变(如问题所示):


你能贴回溯吗?请把回溯的图像贴出来。你能切换到复制粘贴模式并粘贴整个回溯吗?老实说,我不确定是什么原因导致了你的错误。但是,我建议不要自己处理表单,而是使用“我不喜欢django”表单,但“I gues”是唯一的方法,谢谢您发布回溯,请将带有回溯的图像输出。您可以切换到复制粘贴模式并粘贴整个回溯吗?老实说,我不确定是什么原因导致了您的错误。不过,我建议不要自己处理表单,而是使用“我不喜欢django”表单,但“I gues”是唯一的方法,谢谢