【问题标题】:matching query does not exist匹配的查询不存在
【发布时间】:2012-05-10 11:06:01
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 在 javascript 中它通常尝试捕获,而不是尝试除
  • 如果你知道pkfilter(campaing=1) 是多余的。
  • 使用get_object_or_404,忘记异常

标签: django django-queryset


【解决方案1】:

您需要将可能导致异常的语句移到try: 子句的正文中。

语法是“try: something catch stuff:”你的somethingtry:

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

应该是

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

【讨论】:

    【解决方案2】:

    捕获异常时有一点冗余意味着您不必检查 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/')
    

    【讨论】:

    • 非常感谢您的宝贵时间,解释很有帮助
    猜你喜欢
    • 1970-01-01
    • 2011-09-26
    • 2015-01-28
    • 2020-10-15
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多