是否有任何Django函数可以让我从数据库中获取对象,如果没有匹配项,则为None?
现在我正在使用类似:
foo = Foo.objects.filter(bar=baz) foo = len(foo) > 0 and foo.get() or None
但这还不是很清楚,到处都是混乱的。
在Django 1.6中,你可以使用first()Queryset方法。它返回查询集匹配的第一个对象,如果没有匹配的对象,则返回None。
first()
用法:
p = Article.objects.order_by('title', 'pub_date').first()
有两种方法可以做到这一点;
try: foo = Foo.objects.get(bar=baz) except model.DoesNotExist: foo = None
或者,你可以使用包装器:
def get_or_none(model, *args, **kwargs): try: return model.objects.get(*args, **kwargs) except model.DoesNotExist: return None
这样称呼它
foo = get_or_none(Foo, baz=bar)