2013-11-25 55 views
0

remove_1和remove_2正在使用ajax POST在兩個單獨的URL上調用。錯誤:在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」]。

但是當我如果和ELIF把這兩個並傳遞「remove_2_k」,那麼以下錯誤AJAX POST即將

MultiValueDictKeyError:「關鍵‘remove_1_k’在<的QueryDict未發現:【U 'remove_2_k':[u'1'],u'faq_quest':[u'q1'],u'faq_answer':[u'a1']}>「

我該如何解決這個問題?

+1

請出示你的JavaScript ... – Jingo

回答

2

由於request.POST是字典對象,你可以使用.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

感謝您的答覆。但我從js中的兩個不同函數調用一個url。所以我不通過列表,只是一次傳遞一個值。如果我將我的js代碼合併到一個函數中,您的答案也適用於我。我也會嘗試這種可能性。再次感謝 – eegloo

相關問題