django:ValueError需要超过1个值才能解包

时间:2013-05-15 10:27:26

标签: django django-forms django-views

我正在使用ajax和django动态填充组合框。 ajax组件工作得很好,它将数据解析到视图但在视图中,当我使用spiting函数时,它给我一个名为“值错误:需要多于1个值才能解压缩”的异常。任何人都可以帮助我找出错误:) :) 代码:

def dropdownPopulate(request):



if request.method=='POST' :
    key = request.POST['id']
else:
    key=""



level, tree_id=key.split(",")

next_nodes=Structure.objects.filter(tree_id=key[tree_id]).filter(level=key[level])
context={'name':next_nodes}     
return render_to_response('renderAjax.html',context)    

3 个答案:

答案 0 :(得分:1)

这是因为s.split(',')返回的长度为1的列表:

level, tree_id = key.split(',')

确保它返回长度为2的列表:

parts = key.split(',')
if len(parts) == 2:
    level, tree_id = parts
elif len(parts) == 1:
    level = parts[0]
    tree_id = None
else:
    # do something
    level = tree_id = None
    pass

这样的应用过滤器:

next_nodes = Structure.objects.all()
if level:
    next_nodes = next_nodes.filter(level=level)
if tree_id:
    next_nodes = next_nodes.filter(tree_id=tree_id)

答案 1 :(得分:0)

此行可能发生错误:

level, tree_id=key.split(",")

key没有","时,需要处理这种情况。或者它可能有多个","

看看你的代码:

if request.method=='POST' :
    key = request.POST['id']
else:
    key=""

key可能是一个空字符串。

以下是可能发生错误的示例:

1

>>> key = ""
>>> level, tree_id=key.split(",")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack

2

>>> key = "a,b,c"
>>> level, tree_id=key.split(",")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

只有这样才会好(当它只有一个","时):

>>> key = "a,b"
>>> level, tree_id=key.split(",")
>>> 

答案 2 :(得分:0)

你有很多问题。

  

级别,tree_id = key.split(“,”)

这会失败,因为key可能没有,,因此split不会返回2个值。

  

next_nodes = Structure.objects.filter(tree_id =键[tree_id])。过滤器(电平=键[等级])

在这里你以dict的身份访问key,这是不正确的,因为它是字符串。