【问题标题】:I'm getting an error that I do not understand from Django我从 Django 收到一个我不理解的错误
【发布时间】:2021-07-24 17:36:32
【问题描述】:

我正在尝试遵循 James Bennett 示例但收到此错误:

ValueError at /loadtest
too many values to unpack (expected 2)
Request Method: GET
Request URL:    http://127.0.0.1:8000/loadtest
Django Version: 3.2.5
Exception Type: ValueError
Exception Value:    
too many values to unpack (expected 2)
Exception Location: /Users/lowell.dennis/Code/loadtest/env/lib/python3.9/site-packages/django/forms/widgets.py, line 691, in _choice_has_empty_value
Python Executable:  /Users/lowell.dennis/Code/loadtest/env/bin/python
Python Version: 3.9.6
Python Path:    
['/Users/lowell.dennis/Code/loadtest',
 '/Users/lowell.dennis/.vscode/extensions/ms-python.python-2021.7.1053846006/pythonFiles/lib/python/debugpy/_vendored/pydevd',
 '/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python39.zip',
 '/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9',
 '/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload',
 '/Users/lowell.dennis/Code/loadtest/env/lib/python3.9/site-packages']
Server time:    Sat, 24 Jul 2021 01:52:04 +0000

我希望有人能看到我犯的错误。

这是我的表单类代码:

class DynamicForm(Form):
  def __init__(self, *args, **kwargs):
    dynamic = kwargs.pop('dynamic', 0)
    super(DynamicForm, self).__init__(*args, **kwargs)
    for field in dynamic:
      self.fields[field[0]] = field[1]    

我正在构建一个元组数组,(name, field),其中 name 是字段的名称,field 是带有提示、初始、标签的字段类型(如 CharField、ChoiceField、FloatField、IntegerField、URLField) 、必填项和需要的选择项填写)。

我的视图函数以此结束:

 return render(request, 'loadtest.html', {'form': DynamicForm(dynamic = fields)})

我的 loadtest.html 包含以下内容:

<form action="" method="post">
  {% csrf_token %}
  <table>
    {{ form.as_table}}
  </table>
  <input type="submit" value="Submit">
</form>

【问题讨论】:

    标签: django


    【解决方案1】:

    好的,我想通了。 我发现如果我删除所有的 ChoiceFields,我可以摆脱这个错误。显然,我没有正确处理它们。

    最初,我看到一个示例,显示的选项看起来像这样:

    choice = ( ('Choice1', 'Choice1'), (Choice2, Choice2) )
    

    然后我看到了这个stack overflow item,发现你必须使用元组列表而不是元组。

    choice = [ ('Choice1', 'Choice1'), ('Choice2', 'Choice2') ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-01
      • 2020-01-22
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多