2

コンボボックスを動的に設定するために ajax と django を使用しています。ajaxコンポーネントは非常にうまく機能し、データをビューに解析しますが、ビューをintにします。スパイティング機能を使用すると、「値エラー:アンパックするには複数の値が必要」という例外が発生します。誰でもエラーを理解するのを手伝ってもらえますか:) :)コード:

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)    
4

3 に答える 3

1

これはs.split(',')、 length のリストを返すためです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)
于 2013-05-15T10:44:24.680 に答える
0

複数の問題があります。

レベル、tree_id=key.split(",")

keyを持たない可能性が,あるため、これは失敗するため、 split2 つの値は返されません。

next_nodes=Structure.objects.filter(tree_id=key[tree_id]).filter(level=key[レベル])

keyここでは dict としてアクセスしていますが、これは文字列であるため正しくありません。

于 2013-05-15T10:46:07.910 に答える
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

これだけで問題ありません(1つだけの場合","):

>>> key = "a,b"
>>> level, tree_id=key.split(",")
>>> 
于 2013-05-15T10:45:20.603 に答える