异常类型: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.ChoiceField
的 choices
属性必须是元组的可迭代(元组或列表)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.id
和 row.value
替换为您想要从查询中取出的值
【讨论】:
好的,谢谢你,采纳了你的建议,但又遇到了一个错误;异常类型:TypeError 异常值:列表索引必须是整数,而不是 strsqlQuery
返回什么类型的对象?由于tableChoices
不再是字典,因此以下行没有意义tableChoices['id'] = id
你不能使用字符串'id'
作为索引
id 从来都不是索引,它是我之前的 dict obj 中的一列
sqlQuery
对象中有哪些类型的对象?
将是一个 pyodbc.row 对象以上是关于异常类型:ValueError 异常值:解包的值太多 - Django的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV python:ValueError:解包的值太多
Makemigrations ValueError:解包的值太多