异常类型:ValueError 异常值:解包的值太多 - Django

Posted

技术标签:

【中文标题】异常类型:ValueError 异常值:解包的值太多 - Django【英文标题】:Exception Type: ValueError Exception Value:too many values to unpack - Django 【发布时间】:2014-09-15 21:15:16 【问题描述】:

当我从 as (form.as_ul) 渲染以下内容时出现此错误

class InputParametersForm(ModelForm):

sqlConnection = SQLSeverConnection('MSSQLServerDataSource')
tableChoices = 'id': 'value'
sqlQuery = sqlConnection.getTableNames()

for id in sqlQuery:
    tableChoices['id'] = id

for value in sqlQuery:
    tableChoices['value'] = value

TableName = forms.ChoiceField(widget=forms.Select(tableChoices),
                              choices=tableChoices)

ColumnName = forms.ChoiceField(widget=forms.Select())

StartDateTime = forms.DateField(widget=SelectDateWidget())

EndDateTime = forms.DateField(widget=SelectDateWidget())

class Meta:
    model = SelectionHistory
    fields = ("TableName", "ColumnName", "StartDateTime", "EndDateTime")

当我将选项分配给我的 TableName 小部件时,会发生这种破坏性的 onyl,我是否错误地提供了选项?

我正在使用包含两列的字典(都使用相同类型来填充 html 选择框),但之前只提供了表名列表并收到错误 Exception Type: ValueError 异常值:需要超过 1 个值才能解包

【问题讨论】:

【参考方案1】:

django.forms.ChoiceFieldchoices 属性必须是元组的可迭代(元组或列表)here is the relevant part of the documentation

tableChoices = (('id', 'value'), )  # or [('id', 'value')]

编辑:

由于sqlQuery 包含pyodbc.row 对象,您应该像这样创建您的选择

tableChoices = ((row.id, row.value) for row in sqlQuery)

row.idrow.value 替换为您想要从查询中取出的值

【讨论】:

好的,谢谢你,采纳了你的建议,但又遇到了一个错误;异常类型:TypeError 异常值:列表索引必须是整数,而不是 str sqlQuery 返回什么类型的对象?由于tableChoices 不再是字典,因此以下行没有意义tableChoices['id'] = id 你不能使用字符串'id' 作为索引 id 从来都不是索引,它是我之前的 dict obj 中的一列 sqlQuery 对象中有哪些类型的对象? 将是一个 pyodbc.row 对象

以上是关于异常类型:ValueError 异常值:解包的值太多 - Django的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV python:ValueError:解包的值太多

ValueError:解包的值太多(Python 2.7)

Makemigrations ValueError:解包的值太多

Tensorboard - ValueError:解包的值太多(预期 2)

syncdb - ValueError:解包的值太多

如何修复:ValueError:解包的值太多(预期为 2)PCA