如果发生错误,如何在Django中执行代码?

时间:2013-06-17 20:53:57

标签: django django-views

我调用的其中一个视图适用于两个数据库表。它试图在第一个表中找到一个对象。如果找不到该对象,我会收到服务器错误(500)。我不确定代码会是什么样子,但是我想在视图中插入一些代码,如果发生服务器错误就会执行,这样我就可以告诉它尝试在第二个表中找到该对象。

当前代码:

@csrf_exempt
@login_required
def addEvent(request):
    event_id = request.POST['event_id']
    user = request.POST['profile']
    event = Event.objects.get(event_id = event_id)
    if event.DoesNotExist:
        event = customEvent.objects.get(event_id = event_id)
    user = Profile.objects.get(id = user)
    user.eventList.add(event)

    return HttpResponse(status = 200)

1 个答案:

答案 0 :(得分:2)

由于您未在第一个表中找到记录,因此很可能会出现500错误。要解决这个问题,您只需抓住DoesNotExist例外(提及here):

try:
    obj = FooModel.objects.get(...)
except FooModel.DoesNotExist:
    try:
        obj = OtherModel.objects.get(...)
    except OtherModel.DoesNotExist:
        raise Http404

或者您可以使用shortcut

来简化此操作
try:
    obj = FooModel.objects.get(...)
except FooModel.DoesNotExist:
    obj = get_object_or_404(OtherModel, ...)