一尘不染

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

django

当我想使用get()函数选择对象时

personalProfile = World.objects.get(ID=personID)

如果get函数不返回查找值,则“不存在匹配查询”。发生错误。

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

try:
   personalProfile = World.objects.get(ID=personID)
except:
   pass

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

except:
      pass

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


阅读 466

收藏
2020-04-01

共1个答案

一尘不染

这取决于你不存在时要执行的操作。

那里get_object_or_404:

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

get_object_or_404(World, ID=personID)

除了你当前执行的代码外,这与try非常接近。

否则有get_or_create:

personalProfile, created = World.objects.get_or_create(ID=personID)

虽然,如果你选择继续使用当前的方法,则至少要确保将except定位到正确的错误,然后根据需要进行一些处理

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

上面的try / except句柄类似于在文档中找到的get_object_or_404 …

2020-04-01