处理Django的objects.get的最佳方法是什么?

68 投票
8 回答
60513 浏览
提问于 2025-04-16 08:01

每次我这样做的时候:

thepost = Content.objects.get(name="test")

如果没有找到任何东西,它总是会报错。我该怎么处理这个问题呢?

8 个回答

18

你也可以捕捉一个通用的“不存在”的错误。根据文档的说明,详细内容可以查看这个链接:http://docs.djangoproject.com/en/dev/ref/models/querysets/

from django.core.exceptions import ObjectDoesNotExist
try:
    e = Entry.objects.get(id=3)
    b = Blog.objects.get(id=1)
except ObjectDoesNotExist:
    print "Either the entry or blog doesn't exist."
37

通常,使用Django提供的快捷函数 get_object_or_404 会比直接使用API更有用:

from django.shortcuts import get_object_or_404

thepost = get_object_or_404(Content, name='test')

很明显,如果找不到这个对象,它会抛出一个404错误;如果成功找到,代码就会继续执行。

120
try:
    thepost = Content.objects.get(name="test")
except Content.DoesNotExist:
    thepost = None

使用模型的 DoesNotExist 异常

撰写回答