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
错误,而这只是返回第一个匹配项。