Django Model.objects.get()或无

Django Model.objects.get()或无,django,django-models,Django,Django Models,是否有一种方法可以在一次呼叫中完成以下任务: Model.objects.get(id=1) else None 我找到的唯一方法是: try: object = Model... except: object = None 在django中,有没有一种方法可以在单个调用中实现这一点 更新:除了在try/except块中,似乎没有其他方法可以做到这一点,但这里有一个更好的答案:如果您在web请求中使用它,并且如果对象不存在,您希望返回404,那么您可能应该使用 get_obj

是否有一种方法可以在一次呼叫中完成以下任务:

Model.objects.get(id=1) else None
我找到的唯一方法是:

try:
    object = Model...
except:
    object = None
在django中,有没有一种方法可以在单个调用中实现这一点


更新:除了在
try/except
块中,似乎没有其他方法可以做到这一点,但这里有一个更好的答案:

如果您在web请求中使用它,并且如果对象不存在,您希望返回404,那么您可能应该使用

get_object_or_404(Mode, pk=1)
获取对象或404

在你的模型中

@models.permalink
def get_absolute_url(self):
    return "/blog/%s/" self.slug
这个怎么样:

obj = Model.objects.filter(id=1).first()
现在,如果没有id=1的对象存在,obj将为None


Ref:

看来你已经解决了你的问题。作为附加参数,请使用try:。。。Exception(使用特定的异常)在Python中被认为是一种很好的实践(更不用说Django了,它或多或少遵循相同的原理)。
(Model.objects.filter(pk=1)或[None])[0]
不太明确,但有时也很有用。我不喜欢它是一个未命名的例外。这里所涉及的具体的
异常
子类是什么?它是
YourModel.DoesNotExist
FooBar.DoesNotExist
请注意,这不是一回事,因为如果找到多个匹配项,就会出现
get
错误,而这只是返回第一个匹配项。