一尘不染

Django:从数据库中获取对象,如果没有匹配项,则为“无”

django

是否有任何Django函数可以让我从数据库中获取对象,如果没有匹配项,则为None?

现在我正在使用类似:

foo = Foo.objects.filter(bar=baz)
foo = len(foo) > 0 and foo.get() or None

但这还不是很清楚,到处都是混乱的。


阅读 812

收藏
2020-03-29

共2个答案

一尘不染

在Django 1.6中,你可以使用first()Queryset方法。它返回查询集匹配的第一个对象,如果没有匹配的对象,则返回None。

用法:

p = Article.objects.order_by('title', 'pub_date').first()
2020-03-29
一尘不染

有两种方法可以做到这一点;

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)
2020-03-29