2013-11-25 56 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

相关问题