匹配查询不存在

时间:2012-04-30 18:50:17

标签: django django-queryset

我正在尝试捕获异常但不起作用。这是我视图中的代码:

@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:” 但错误仍然存​​在“活动匹配查询不存在”。 任何的想法?

谢谢!

2 个答案:

答案 0 :(得分:3)

您需要在try:子句的主体中移动可能导致异常的语句。

语法是“try:某事抓住东西:”你的某事高于try:

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

应该是

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

答案 1 :(得分: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/')