首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django:从DB获取一个对象,如果没有匹配,则为'None‘

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

Stack Overflow用户
提问于 2009-10-02 22:15:34
回答 6查看 60.3K关注 0票数 104

有没有什么Django函数可以让我从数据库中获取一个对象,或者如果没有匹配的话就没有?

现在我使用的是这样的东西:

代码语言:javascript
复制
foo = Foo.objects.filter(bar=baz)
foo = len(foo) > 0 and foo.get() or None

但这并不是很清楚,而且到处都是乱七八糟的。

EN

回答 6

Stack Overflow用户

发布于 2009-10-02 22:27:49

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

代码语言:javascript
复制
try:
    foo = Foo.objects.get(bar=baz)
except model.DoesNotExist:
    foo = None

或者,您可以使用包装器:

代码语言:javascript
复制
def get_or_none(model, *args, **kwargs):
    try:
        return model.objects.get(*args, **kwargs)
    except model.DoesNotExist:
        return None

这样叫它

代码语言:javascript
复制
foo = get_or_none(Foo, baz=bar)
票数 144
EN

Stack Overflow用户

发布于 2010-01-08 00:24:54

为了在sorki的回答中添加一些示例代码(我想将此作为评论添加,但这是我的第一篇文章,我没有足够的声誉来留下评论),我实现了一个get_or_none自定义管理器,如下所示:

代码语言:javascript
复制
from django.db import models

class GetOrNoneManager(models.Manager):
    """Adds get_or_none method to objects
    """
    def get_or_none(self, **kwargs):
        try:
            return self.get(**kwargs)
        except self.model.DoesNotExist:
            return None

class Person(models.Model):
    name = models.CharField(max_length=255)
    objects = GetOrNoneManager()

现在我可以这样做了:

代码语言:javascript
复制
bob_or_none = Person.objects.get_or_none(name='Bob')
票数 84
EN

Stack Overflow用户

发布于 2014-05-09 01:04:40

您也可以尝试使用django恼人(它还有另一个有用的功能!)

使用以下命令进行安装:

代码语言:javascript
复制
pip install django-annoying

from annoying.functions import get_object_or_None
get_object_or_None(Foo, bar=baz)
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1512059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档