Django:从DB中获取一个对象,如果没有匹配,则为‘None’

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

有什么Django函数可以让我从数据库中获取一个对象吗?如果没有匹配,则没有一个?

现在我用的是:

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

但这还不是很清楚......

提问于
用户回答回答于

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

用法:

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)

扫码关注云+社区