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 回答