ValueError:没有足够的值来解包(预期2,得到1)

时间:2016-11-22 01:44:52

标签: django django-forms django-templates django-views

以下是我的代码

views.py

from django.shortcuts import render
from .forms import MedicineForm
from .models import Medicine

def index(request):
    all_medicine = Medicine.objects.order_by('id')
    return render(request, 'medicine/index.html', {'all_medicine': all_medicine})

def add(request):
if request.method == 'POST':
    form = MedicineForm(request.POST)
    if form.is_valid():
        new = Medicine()
        new.name = form.cleaned_data['药品名称']
        new.price = form.cleaned_data['药品价格']
        new.number = form.cleaned_data['药品编号']
        new.sort = form.cleaned_data['药品分类']
        new.unit = form.cleaned_data['计价单位']
        new.save()
        return render(request, 'medicine/index.html')
else:
    form = MedicineForm()
return render(request, 'medicine/add.html', {'form': form},)

forms.py

from django import forms


class MedicineForm(forms.Form):
    药品编号 = forms.IntegerField()
    药品名称 = forms.CharField(max_length=100)
    药品价格 = forms.IntegerField()
    jj_choice = {
        '瓶': '瓶',
        '包': '包',
        '盒': '盒',
    }
    计价单位 = forms.ChoiceField(
        choices=jj_choice
    )
    药品分类 = forms.CharField(max_length=100)

add.html:

{% extends 'polls/index.html' %}


{% block medicine_form %}
<form action="http://localhost:8000/medicine/add/" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="添加药品" />
</form>


{% endblock %}

回溯:

  

内部的文件“E:\ p \ lib \ site-packages \ django \ core \ handlers \ exception.py”     39. response = get_response(request)

     

_get_response中的文件“E:\ p \ lib \ site-packages \ django \ core \ handlers \ base.py”     187. response = self.process_exception_by_middleware(e,request)

     

_get_response中的文件“E:\ p \ lib \ site-packages \ django \ core \ handlers \ base.py”     185. response = wrapped_callback(request,* callback_args,** callback_kwargs)

     

添加文件“F:\ ddjj \ x \ mysite \ medicine \ views.py”     25. return render(request,'medicine / add.html',{'form':form},)

     

渲染中的文件“E:\ p \ lib \ site-packages \ django \ shortcuts.py”     30. content = loader.render_to_string(template_name,context,request,using = using)

     

render_to_string中的文件“E:\ p \ lib \ site-packages \ django \ template \ loader.py”     68. return template.render(context,request)

     

渲染中的文件“E:\ p \ lib \ site-packages \ django \ template \ backends \ django.py”     66. return self.template.render(context)

     

渲染中的文件“E:\ p \ lib \ site-packages \ django \ template \ base.py”     208. return self._render(context)

     

_render中的文件“E:\ p \ lib \ site-packages \ django \ template \ base.py”     199. return self.nodelist.render(context)

     

渲染中的文件“E:\ p \ lib \ site-packages \ django \ template \ base.py”     994. bit = node.render_annotated(context)

     

render_annotated中的文件“E:\ p \ lib \ site-packages \ django \ template \ base.py”     961. return self.render(context)

     

渲染中的文件“E:\ p \ lib \ site-packages \ django \ template \ loader_tags.py”     174. return compiled_pa​​rent._render(context)

     

_render中的文件“E:\ p \ lib \ site-packages \ django \ template \ base.py”     199. return self.nodelist.render(context)

     

渲染中的文件“E:\ p \ lib \ site-packages \ django \ template \ base.py”     994. bit = node.render_annotated(context)

     

render_annotated中的文件“E:\ p \ lib \ site-packages \ django \ template \ base.py”     961. return self.render(context)

     

渲染中的文件“E:\ p \ lib \ site-packages \ django \ template \ loader_tags.py”     70. result = block.nodelist.render(context)

     

渲染中的文件“E:\ p \ lib \ site-packages \ django \ template \ base.py”     994. bit = node.render_annotated(context)

     

render_annotated中的文件“E:\ p \ lib \ site-packages \ django \ template \ base.py”     961. return self.render(context)

     

渲染中的文件“E:\ p \ lib \ site-packages \ django \ template \ base.py”     1050. return render_value_in_context(output,context)

     

render_value_in_context中的文件“E:\ p \ lib \ site-packages \ django \ template \ base.py”     1028. value = force_text(value)

     

force_text中的文件“E:\ p \ lib \ site-packages \ django \ utils \ encoding.py”     76. s = six.text_type(s)

     

文件“E:\ p \ lib \ site-packages \ django \ utils \ html.py”in     391. klass。 str = lambda self:mark_safe(klass_str(self))

     

str 中的文件“E:\ p \ lib \ site-packages \ django \ forms \ forms.py”     123. return self.as_table()

     

as_table中的文件“E:\ p \ lib \ site-packages \ django \ forms \ forms.py”     271. errors_on_separate_row = False)

     

_html_output中的文件“E:\ p \ lib \ site-packages \ django \ forms \ forms.py”     226.'field':six.text_type(bf),

     

文件“E:\ p \ lib \ site-packages \ django \ utils \ html.py”in     391. klass。 str = lambda self:mark_safe(klass_str(self))

     

str 中的文件“E:\ p \ lib \ site-packages \ django \ forms \ boundfield.py”     43.返回self.as_widget()

     

as_widget中的文件“E:\ p \ lib \ site-packages \ django \ forms \ boundfield.py”     101. return force_text(widget.render(name,self.value(),attrs = attrs))

     

渲染中的文件“E:\ p \ lib \ site-packages \ django \ forms \ widgets.py”     537. options = self.render_options([value])

     

render_options中的文件“E:\ p \ lib \ site-packages \ django \ forms \ widgets.py”     560.对于option_value,self.choices中的option_label:

     

异常类型:/ medicine / add /的ValueError   异常值:没有足够的值来解包(预期2,得1)

2 个答案:

答案 0 :(得分:1)

你有

return render(request, 'medicine/add.html', {'form': form},)

你需要

return render(request, 'medicine/add.html', {'form': form})

,最后使它成为元组

答案 1 :(得分:1)

jj_choice = {
    '瓶': '瓶',
    '包': '包',
    '盒': '盒',
}

应该写成,

jj_choice = (
    ('瓶', '瓶'),
    ('包', '包'),
    ('盒', '盒'),
)

key,text tuples。