我正在使用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)
答案 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
,这是不正确的,因为它是字符串。