当我要求模型管理器获取一个对象时,它会DoesNotExist在没有匹配对象时引发.
go = Content.objects.get(name="baby")
Run Code Online (Sandbox Code Playgroud)
相反的DoesNotExist,我怎么能有go可以None代替?
我和一些同事正在讨论这个问题.当你期望只有一个对象时,有没有一种首选的方法来检索Django中的对象?
两个明显的方法是:
try:
obj = MyModel.objects.get(id=1)
except MyModel.DoesNotExist:
# We have no object! Do something...
pass
Run Code Online (Sandbox Code Playgroud)
和
objs = MyModel.objects.filter(id=1)
if len(objs) == 1:
obj = objs[0]
else:
# We have no object! Do something...
pass
Run Code Online (Sandbox Code Playgroud)
第一种方法似乎在行为上更正确,但在控制流中使用异常可能会引入一些开销.第二个更环形,但不会引发异常.
关于哪一个更好的想法?哪个更有效率?