2013-04-12 2 views
0

Это код, который я написал, чтобы дать результат расширенного поиска для некоторых подканалов, в которых есть атрибуты и значения атрибутов, каждый в другой таблице. Это дает мне эту ошибку: 'Value' object does not support indexing at line 35Объект «Значение» не поддерживает индексирование

sub_id = request.GET['sub_ch_id'] 
attributes = Attribute.objects.filter(subchannel_id = sub_id) 
values =[] 
print "attributes" 
# print request 
post = [] 
value_obj =[] 
for w in attributes: 
    name = w.name 
    print request.GET[name] 
    values.append(request.GET[name]) 



result_search_obj = [] 
flag = False 
result_search = [] 
result = [] 
post = [] 
i = 0 
f = i+1 
# post_temp = "" 

# print "HIIIIII", len(result_search_obj) 
for j in range(0,len(attributes)): 
    # print 'EREEEEEEE' 
    result_search_obj+=(Value.objects.filter(attribute_id = attributes[j].id 
     , value = values[j])) 
    # print '1st loop' 
result_search = [[] for o in result_search_obj]  
for k in range(0,len(result_search_obj)): 
    # print '2 loop' 
    for l in range(0,len(result_search_obj)): 
     print 'why u dnt go here' 

     result_search[k].append(result_search_obj[k][l].Post_id) 
     # print '4 loop' 
for a in range(0,len(result_search)): 

    result_search.sort(len(result_search[k])) 
    # print '6 loop' 
for h in range(0,len(result_search)): 

    post_temp = "" 
    # print '3 loop' 
    for g in result_search[h]: 
     tmp=result_search[h] 
     loc = temp[g] 
     if loc == result_search[h+1][g]: 
      flag = True 
      post_temp = tmp[g] 
      break 
    post = post_temp 
print post 

return HttpResponse('filter_post_channel.html', {'posts' : post}) 
+0

Уважаемый Mohamed, линия 35 пусто в вашем коде, это ваш полный файл? Или вы могли бы указать, какая строка поднимает ошибку? – Alexis

+0

Покажите нам результат для 'print result_search_obj' после первого цикла, пожалуйста, – soon

ответ

1

Я думаю, что проблема эта линия:

result_search_obj+=(Value.objects.filter(attribute_id = attributes[j].id 
    , value = values[j])) 

Вы создаете кортеж и добавляет его в список. Вы ожидаете добавить кортеж как кортеж, но Python выравнивает кортеж и вместо этого добавляет его элементы.

Так что вам нужно изменить строку, чтобы создать список и добавить его в result_search_obj

result_search_obj+= [ (Value.objects.filter(attribute_id = attributes[j].id 
    , value = values[j])) ] 

испытания Образец

>>> x=[] 
>>> x += (1, 2) 
>>> x 
[1, 2] 
>>> x += [(1, 2)] 
>>> x 
[1, 2, (1, 2)] 
>>> x += (1, 2) 
>>> x 
[1, 2, (1, 2), 1, 2] 
>>> 
+0

Большое вам спасибо, что вызвало проблему: D –

Смежные вопросы