0

モデルの単一のフィールドからすべての要素に対して操作を実行しようとしていますが、エラーが発生します。

list indices must be integers, not tuple

これがviews.pyの私のインデックス関数です:

design_list = Design.objects.values_list().order_by('-date_submitted')[:10]

x=list(design_list)
for i in x:
    b = list(x[i]) # ERROR RELATES TO THIS LINE
    c = b[2]
    b[2] = datetimeConvertToHumanReadable(c) 
    new_list[i] = b

return render_to_response('index.html', {
    'design_list': new_list,    
})

これはよくある問題だと思いますが、私が間違っていることを誰かが知っていますか?

4

2 に答える 2

2

Python は C ではありません -for x in yループはインデックスではなく、アイテム自体をループします。

design_listタプルのリストなので、そのように扱うことができます。タプルは不変であるため、新しいリストを作成する必要があります。おそらくリスト内包表記が最適でしょう。

# Create a new list of tuples
new_list = [row[:2] + (datetimeConvertToHumanReadable(row[2]),) + row[3:]
            for row in x]

ただし、エラーに混乱したため、本当にタプルを使用する必要があるようには見えません。この場合は、values_list(タプルを返す) を使用せずにorder_by、 を使用して、フィールドを直接参照します ( と呼ばれるものと仮定しますdate_submitted)。

design_list = Design.objects.order_by('-date_submitted')[:10]

x=list(design_list)
for row in x:
    row.date_submitted = datetimeConvertToHumanReadable(row.date_submitted) 

return render_to_response('index.html', {
    'design_list': x,
})
于 2012-10-24T18:26:00.147 に答える
1

for i in x:インデックスではなくのを繰り返します。xコードの背後にある意図 (および QuerySets の適切な使用) を分析しないと、行は次のように変更される可能性があります。

b = list(i)

この特定のエラーを回避するには。

于 2012-10-24T18:22:16.197 に答える