django objects.get() 找不到结果
django objects.get() does not find result
快速提问。我 运行 以下代码带有 try except
语句(因为数据库中可能没有条目)。对于某些条目,我 运行 进入了 except 块,尽管数据库中肯定有一个条目!当使用 objects.filter()
而不是 objects.get()
我没有这个问题 - 它永远不会进入数据库中相同条目的 except 块!
key = "anystringasprimarykey"
username = "anyusername"
try:
entry = MyDatabase.objects.get(ort=key, user=username)
except:
print("oh, exception!")
任何人都可以告诉我我做错了什么吗?
您 运行 进入错误是因为您发现 多个 个对象实例,如果有可能,那么您应该使用 filter()
, get()
更适用于您确定只有一个可能条目的情况。
当前发生的情况是您捕获了 所有 错误,而不仅仅是您可能习惯的 DoesNotExist 错误..
从the docs,你可以看到get
能够捕捉到两种不同的错误——MultipleObjectsReturned
和DoesNotExist
,你得到的是前者。如果你想继续使用 get
你应该明确地抓住两者
try:
entry = MyDatabase.objects.get(ort=key, user=username)
except MultipleObjectsReturned:
print("oh, I've forgotten to do something with the exception!")
except DoesNotExist:
print("oh, I've forgotten to do something with the exception!")
就您的实际错误处理而言,仅打印到控制台并不是很有帮助,这可能意味着如果没有缺少的条目值,后面的代码将无法正常运行,您可能需要 return 错误响应(即 HttpResponseNotFound),记录错误,或提供默认值以继续。
objects.get() 当您非常确定只有一个结果时使用。但最好使用objects.filter().first(),因为它不会导致任何错误。例如你可以写:
entry = MyDatabase.objects.filter(ort=key, user=username).first()
而不是
entry = MyDatabase.objects.get(ort=key, user=username)
然后您可以检查查询是否返回任何对象:
if entry:
#some actions
model.objects.get()
不好,千万别用。
相反,使用 filter().first()
或单独 filter()
。
get在没有匹配或者有多个匹配时会抛出异常,它只有return个对象。
在另一边进行过滤,无论如何都会 return 一个查询集,哪个更好,因为它可以 return 具有零元素或多个元素或单个元素的查询集。
快速提问。我 运行 以下代码带有 try except
语句(因为数据库中可能没有条目)。对于某些条目,我 运行 进入了 except 块,尽管数据库中肯定有一个条目!当使用 objects.filter()
而不是 objects.get()
我没有这个问题 - 它永远不会进入数据库中相同条目的 except 块!
key = "anystringasprimarykey"
username = "anyusername"
try:
entry = MyDatabase.objects.get(ort=key, user=username)
except:
print("oh, exception!")
任何人都可以告诉我我做错了什么吗?
您 运行 进入错误是因为您发现 多个 个对象实例,如果有可能,那么您应该使用 filter()
, get()
更适用于您确定只有一个可能条目的情况。
当前发生的情况是您捕获了 所有 错误,而不仅仅是您可能习惯的 DoesNotExist 错误..
从the docs,你可以看到get
能够捕捉到两种不同的错误——MultipleObjectsReturned
和DoesNotExist
,你得到的是前者。如果你想继续使用 get
你应该明确地抓住两者
try:
entry = MyDatabase.objects.get(ort=key, user=username)
except MultipleObjectsReturned:
print("oh, I've forgotten to do something with the exception!")
except DoesNotExist:
print("oh, I've forgotten to do something with the exception!")
就您的实际错误处理而言,仅打印到控制台并不是很有帮助,这可能意味着如果没有缺少的条目值,后面的代码将无法正常运行,您可能需要 return 错误响应(即 HttpResponseNotFound),记录错误,或提供默认值以继续。
objects.get() 当您非常确定只有一个结果时使用。但最好使用objects.filter().first(),因为它不会导致任何错误。例如你可以写:
entry = MyDatabase.objects.filter(ort=key, user=username).first()
而不是
entry = MyDatabase.objects.get(ort=key, user=username)
然后您可以检查查询是否返回任何对象:
if entry:
#some actions
model.objects.get()
不好,千万别用。
相反,使用 filter().first()
或单独 filter()
。
get在没有匹配或者有多个匹配时会抛出异常,它只有return个对象。
在另一边进行过滤,无论如何都会 return 一个查询集,哪个更好,因为它可以 return 具有零元素或多个元素或单个元素的查询集。