有没有什么Django函数可以让我从数据库中获取一个对象,或者如果没有匹配的话就没有?
现在我使用的是这样的东西:
foo = Foo.objects.filter(bar=baz)
foo = len(foo) > 0 and foo.get() or None
但这并不是很清楚,而且到处都是乱七八糟的。
发布于 2009-10-02 22:27:49
有两种方法可以做到这一点;
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)
发布于 2010-01-08 00:24:54
为了在sorki的回答中添加一些示例代码(我想将此作为评论添加,但这是我的第一篇文章,我没有足够的声誉来留下评论),我实现了一个get_or_none自定义管理器,如下所示:
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()
现在我可以这样做了:
bob_or_none = Person.objects.get_or_none(name='Bob')
发布于 2014-05-09 01:04:40
您也可以尝试使用django恼人(它还有另一个有用的功能!)
使用以下命令进行安装:
pip install django-annoying
from annoying.functions import get_object_or_None
get_object_or_None(Foo, bar=baz)
https://stackoverflow.com/questions/1512059
复制相似问题