2012-04-30 201 views
1

我試圖捕捉異常,但不work.This在我看來代碼:匹配查詢不存在

@login_required 
def activities_edit(request, edit): 

    ActivityFormSet = modelformset_factory(Activity, can_delete=True) 
    act_edit= Activity.objects.filter(campaing=1).get(pk=edit) 
    try: 
     if act_edit: 
      if request.method == 'POST': 
       formset = ActivityFormSet(request.POST, request.FILES, queryset=Activity.objects.filter(pk=edit))  
       if formset.is_valid(): 
        formset.save() 
        return HttpResponseRedirect('/activities/') 
      else: 
       formset = ActivityFormSet(queryset=Activity.objects.filter(pk=edit)) 
    except act_edit.DoesNotExist: 
     return HttpResponseRedirect('/activities/') 

我還與試圖:「除了act_edit.DoesNotExist:」 但錯誤仍然存​​在「活動匹配查詢不存在」。 有什麼想法?

謝謝!

+0

在JavaScript中它通常嘗試捕獲,而不是嘗試除 – Evan

+0

如果你知道'pk','filter(campaining = 1)'是還原劑。 – tuxmaul

+1

使用'get_object_or_404',忘記例外 –

回答

3

您需要移動可能導致try:子句正文中的異常的語句。

的語法是 「嘗試:東西東西:」 你東西try:

act_edit= Activity.objects.filter(campaing=1).get(pk=edit) 
try: 

上面應該是

try: 
    act_edit = Activity.objects.filter(campaing=1).get(pk=edit) 
+0

謝謝!,是我的錯誤 – LaBE

3

你有冗餘的一點點捕捉異常意味着您不必檢查act_edit是否爲空,因爲如果它爲空,它將引發DoesNotExist。此外,該模型有DoesNotExist不是實例。

@login_required 
def activities_edit(request, edit): 

    ActivityFormSet = modelformset_factory(Activity, can_delete=True)  
    try: 
     act_edit= Activity.objects.filter(campaing=1).get(pk=edit) 

     if request.method == 'POST': 
      formset = ActivityFormSet(request.POST, request.FILES, queryset=Activity.objects.filter(pk=edit))  
      if formset.is_valid(): 
       formset.save() 
       return HttpResponseRedirect('/activities/') 
     else: 
      formset = ActivityFormSet(queryset=Activity.objects.filter(pk=edit)) 
      #HttpResponse not returned error here. 
    except Activity.DoesNotExist: 
     return HttpResponseRedirect('/activities/') 
+0

非常感謝你的時間,這個解釋非常有幫助 – LaBE