获取对象时如何处理"匹配查询不存在"

zHe*_*tHz 7 django django-views python-2.7

当我想选择具有get()函数的对象时

personalProfile = World.objects.get(ID=personID)
Run Code Online (Sandbox Code Playgroud)

如果get函数没有返回查找值,则"匹配查询不存在".发生错误.

如果我不需要这个错误,我将使用try和except函数

try:
   personalProfile = World.objects.get(ID=personID)
except:
   pass
Run Code Online (Sandbox Code Playgroud)

但我认为这不是我使用以来最好的方法

except:
      pass
Run Code Online (Sandbox Code Playgroud)

请推荐一些想法或代码示例来解决这个问题

Say*_*yse 10

这取决于你想要做什么,如果它不存在..

Theres get_object_or_404:

在给定的模型管理器上调用get(),但它引发了Http404而不是模型的DoesNotExist异常.

get_object_or_404(World, ID=personID)
Run Code Online (Sandbox Code Playgroud)

除了您目前的代码之外,这与try非常接近.

除此之外get_or_create:

personalProfile, created = World.objects.get_or_create(ID=personID)
Run Code Online (Sandbox Code Playgroud)

虽然,如果您选择继续使用当前的方法,至少要确保将except定位到正确的错误,然后根据需要执行某些操作.

try:
   personalProfile = World.objects.get(ID=personID)
except MyModel.DoesNotExist:
    raise Http404("No MyModel matches the given query.")
Run Code Online (Sandbox Code Playgroud)

上面的try/except句柄类似于get_object_or_404文档中的内容...