错误:在QueryDict中找不到密钥

时间:2013-11-25 10:19:31

标签: javascript jquery django python-2.7 django-views

使用ajax POST在两个单独的URL上调用

remove_1和remove_2。

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')

但是我希望将这个功能组合起来,如果request.POST ['remove_1_k']我可以删除remove_1_rec,或者如果request.POST ['remove_2_k']可以删除remove_2_rec。

但是当我把这两个放在if和elif并传递ajax POST为“remove_2_k”时,接下来会出现错误

MultiValueDictKeyError:在< QueryDict:{u'remove_2_k':[u'1'],u'faq_quest':[u'q1'],u'faq_answer':[u'中找不到“键'remove_1_k' A1' ]}>“中

我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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 :(得分: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()