【问题标题】:Exception Type: ValueError Exception Value:too many values to unpack - Django异常类型:ValueError 异常值:解包的值太多 - 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 个值才能解包

【问题讨论】:

    标签: django select django-forms django-templates django-widget


    【解决方案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 异常值:列表索引必须是整数,而不是 str
    • sqlQuery 返回什么类型的对象?由于tableChoices 不再是字典,因此以下行没有意义tableChoices['id'] = id 你不能使用字符串'id' 作为索引
    • id 从来都不是索引,它是我之前的 dict obj 中的一列
    • sqlQuery 对象中有哪些类型的对象?
    • 将是一个 pyodbc.row 对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 2012-02-15
    相关资源
    最近更新 更多