Tom*_*Tom 17 python django exception
是否有可能MultipleObjectsReturned在Django中捕获错误?
我做了一个搜索查询,如果有多个对象,我想要列表中的第一个,所以我尝试了这个:
try:
Location.objects.get(name='Paul')
except MultipleObjectsReturned:
Location.objects.get(name='Paul')[0]
Run Code Online (Sandbox Code Playgroud)
然而,在存在DOC虽然
全局变量MultipleObjectsReturned不存在
rof*_*fls 38
使用过滤器:
Location.objects.filter(name='Paul').first()
Run Code Online (Sandbox Code Playgroud)
或者导入例外:
from django.core.exceptions import MultipleObjectsReturned
...
try:
Location.objects.get(name='Paul')
except MultipleObjectsReturned:
Location.objects.filter(name='Paul').first()
Run Code Online (Sandbox Code Playgroud)
Vas*_*han 25
这是更多的pythonic方式来做到这一点.
try:
Location.objects.get(name='Paul')
except Location.MultipleObjectsReturned:
Location.objects.filter(name='Paul')[0]
Run Code Online (Sandbox Code Playgroud)
这不是最好的做法.您可以在技术上执行此操作而不使用异常.你打算使用Location,并Car在这个例子吗?
你可以这样做:
Location.objects.filter(name='Paul').order_by('id').first()
Run Code Online (Sandbox Code Playgroud)
我强烈建议您阅读Django QuerySet API参考.
https://docs.djangoproject.com/en/1.8/ref/models/querysets/
要回答有关异常存在位置的问题,您始终可以在模型本身上访问这些QuerySet异常.例如Location.DoesNotExist和Location.MultipleObjectsReturned.如果已导入模型,则无需导入它们.
小智 5
当您知道只有一个对象与您的查询匹配时,请使用 get。如果没有项目与查询匹配,get() 将引发DoesNotExist 异常。如果多个项目与查询匹配,get() 将引发 MultipleObjectsReturned 异常。像这样使用 get() :
try:
one_entry = Entry.objects.get(blog=2000)
except Entry.DoesNotExist:
# query did not match to any item.
pass
except Entry.MultipleObjectsReturned:
# query matched multiple items.
pass
else:
# query matched to just one item
print(one_entry)
Run Code Online (Sandbox Code Playgroud)