当我要求模型管理器获取一个对象时,当没有匹配的对象时,它会引发DoesNotExist。

go = Content.objects.get(name="baby")

而不是DoesNotExist,我怎么能去是None代替?


当前回答

如果你想要一个简单的单行解决方案,不涉及异常处理、条件语句或Django 1.6+的要求,可以这样做:

x = next(iter(SomeModel.objects.filter(foo='bar')), None)

其他回答

如果你想要一个简单的单行解决方案,不涉及异常处理、条件语句或Django 1.6+的要求,可以这样做:

x = next(iter(SomeModel.objects.filter(foo='bar')), None)

从django 1.6开始,你可以像这样使用first()方法:

Content.objects.filter(name="baby").first()

如果发生这样的事呢?

go = (Content.objects.filter(name="value") or [None])[0]

这是一个讨厌的函数,你可能不想重新实现:

from annoying.functions import get_object_or_None
#...
user = get_object_or_None(Content, name="baby")

来一片怎么样?它将解析到限制1。

go = Content.objects.filter(name="baby")[0]