2013-11-25 3 views
0

remove_1 и remove_2 получают вызов по двум отдельным URL-адресам с помощью ajax POST.Ошибка: ключ не найден в QueryDict

def remove_1(request):   
    if not request.is_ajax(): 
     return    
    if request.POST['remove_1_k']: 
     remove_1_rec = db.Query(user_guide).filter('remove_1_k =', int(request.POST['remove_1_k'])).get()   
     remove_1_rec.delete()   
     return HttpResponse('Remove one is done') 

def remove_2(request):   
    if not request.is_ajax(): 
     return    
    if request.POST['remove_2_k']: 
     remove_2_rec = db.Query(faqs).filter('remove_2_k =', int(request.POST['remove_2_k'])).get()   
     remove_2_rec.delete()   
     return HttpResponse('Remove two is done') 

Но я хочу, чтобы объединить эту функцию таким образом, что я должен быть в состоянии удалить remove_1_rec если request.POST [ «remove_1_k»] или в состоянии удалить remove_2_rec если request.POST [ «remove_2_k»].

Но когда я ставлю эти два, если и Элиф и проходит POST Ajax для «remove_2_k», то следующее сообщение об ошибке приходит:

MultiValueDictKeyError: «Key„remove_1_k“не найден в < QueryDict: {и 'remove_2_k': [u'1 '], u'faq_quest': [u'q1 '], u'faq_answer': [u'a1 ']}> "

Как это решить?

+1

пожалуйста, покажите ваши JavaScript ... – Jingo

ответ

2

С request.POST is dict как объект, вы можете использовать .get() с некоторыми добавленными бонусами.

Измените ваш if к этому

if request.POST.get('remove_1_k'): 
    #do stuff to 1_k 
elif request.POST.get('remove_2_k'). 
    #do stuff to 2_k 

Это будет держать его от повышения KeyError.

.get() вернет значение из ключа или None, если не задано значение по умолчанию.

1

Похоже, вы получаете список значений, так же как request.POST.getlist('remove_1_k'). Он предоставит вам список значений для этого ключа, а затем примените соответствующую индексацию для получения требуемого значения.

Как

rk1 = request.POST.getlist('remove_1_k') 
remove_1_rec = db.Query(user_guide).filter('remove_1_k =', 
       int(request.POST.getlist('remove_1_k')[0])) 
       .get()   
+0

Спасибо за ответ. Но я называю один URL из двух разных функций в js. Поэтому я не передаю список, просто передавая одно значение за раз. Ваш ответ также будет работать для меня, если я буду объединять свой js-код в одной функции. Я тоже постараюсь с этой возможностью. Еще раз спасибо – eegloo

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