表单中带有复选框的Django WizardView导致“ValueError太多值无法解包(应为2)”

2024-10-03 19:30:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是WizardView,其中第二种形式是:

FRAME_AND_ALIGNMENT_CHOICES = ["Align Derailleur Hanger", "Basic Clean", 
"Install Front Basket"]

class RepairsForm(Form):
    frame_and_alignment = forms.MultipleChoiceField(
        choices=FRAME_AND_ALIGNMENT_CHOICES,
        widget=forms.CheckboxSelectMultiple
    )

我有这样的奇观:

^{pr2}$

最后,下面是我的第二个表单模板:

<form action="" method="post">
    {% csrf_token %}
    {{ wizard.management_form }}
    {{ wizard.form.frame_and_alignment }}
{#    {{ wizard.form.as_p }}#}
    <input type="submit" value="Save" />
</form>

表单的第一页填充得很好,但是当我点击submit继续处理这个模板和表单时,我在语句{{ wizard.form.frame_and_alignment }}上得到一个ValueError,它的内容是“太多的值无法解包(预期为2)”。我猜这和多回声场有关。在

编辑回溯

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/create_order/

Django Version: 1.7.2
Python Version: 3.4.2
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.formtools',
 'app')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Template error:
In template /Users/johnking/workspace/rice-bikes/app/templates/app/repairs.html, error at line 10
   too many values to unpack (expected 2)
   1 : {% extends "app/base.html" %}


   2 : 


   3 : {% block content %}


   4 : 


   5 : {%  if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}


   6 : 


   7 : <form action="" method="post">


   8 :     {% csrf_token %}


   9 :     {{ wizard.management_form }}


   10 :      {{ wizard.form.frame_and_alignment }} 


   11 : {#    {{ wizard.form.as_p }}#}


   12 :     <input type="submit" value="Save" />


   13 : </form>


   14 : 


   15 : 


   16 : {% endblock %}

Traceback:
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
  137.                 response = response.render()
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/response.py" in render
  103.             self.content = self.rendered_content
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/response.py" in rendered_content
  80.         content = template.render(context)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/base.py" in render
  148.             return self._render(context)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/base.py" in _render
  142.         return self.nodelist.render(context)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/base.py" in render
  844.                 bit = self.render_node(node, context)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/debug.py" in render_node
  80.             return node.render(context)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/loader_tags.py" in render
  126.         return compiled_parent._render(context)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/base.py" in _render
  142.         return self.nodelist.render(context)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/base.py" in render
  844.                 bit = self.render_node(node, context)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/debug.py" in render_node
  80.             return node.render(context)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/loader_tags.py" in render
  65.                 result = block.nodelist.render(context)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/base.py" in render
  844.                 bit = self.render_node(node, context)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/debug.py" in render_node
  80.             return node.render(context)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/template/debug.py" in render
  93.             output = force_text(output)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/utils/encoding.py" in force_text
  83.                     s = six.text_type(s)
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/forms/forms.py" in __str__
  508.         return self.as_widget()
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/forms/forms.py" in as_widget
  560.         return force_text(widget.render(name, self.value(), attrs=attrs))
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/forms/widgets.py" in render
  739.         return self.get_renderer(name, value, attrs, choices).render()
File "/Users/johnking/workspace/rice-bikes/py3env/lib/python3.4/site-packages/django/forms/widgets.py" in render
  687.             choice_value, choice_label = choice

Exception Type: ValueError at /create_order/
Exception Value: too many values to unpack (expected 2)

Tags: djangoinpylibpackagessitetemplaterender
1条回答
网友
1楼 · 发布于 2024-10-03 19:30:31

你的^{}应该是两个项目的可迭代列表。在

您可以选择:

FRAME_AND_ALIGNMENT_CHOICES = [
    ("Align Derailleur Hanger", "Align Derailleur Hanger")
    ("Basic Clean", "Basic Clean"),
    ("Install Front Basket", "Install Front Basket"),
]

或者使用列表理解来减少重复:

^{pr2}$

或者,您可能希望在数据库中存储代码,并向用户显示完整的描述:

FRAME_AND_ALIGNMENT_CHOICES = [
    ("derailleur", "Align Derailleur Hanger"),
    ("clean", Basic Clean"),
    ("basket", "Install Front Basket"),
]

相关问题 更多 >