RealEstateAgent
是一个模型,执行 RealEstateAgent.objects.filter(name = 'betterhomes')
返回 5 个对象。
我想使用 RealEstateAgent.objects.get(name='betterhomes')
捕获 MultipleObjectsReturned
异常。
我正在尝试这个,但异常没有被捕获。
from django.core.exceptions import MultipleObjectsReturned
try:
RealEstateAgent.objects.get(name='bh')
except MultipleObjectsReturned, e:
print ''
这是回溯:
DoesNotExist Traceback (most recent call last)
<ipython-input-49-9458986408df> in <module>()
1 try:
----> 2 RealEstateAgent.objects.get(name='better homes')
3 except MultipleObjectsReturned, e:
4 print ''
5
/home/dubizzle/webapps/django/src/django/django/db/models/manager.pyc in get(self, *args, **kwargs)
130
131 def get(self, *args, **kwargs):
--> 132 return self.get_query_set().get(*args, **kwargs)
133
134 def get_or_create(self, **kwargs):
/home/dubizzle/webapps/django/src/django/django/db/models/query.pyc in get(self, *args, **kwargs)
347 if not num:
348 raise self.model.DoesNotExist("%s matching query does not exist."
--> 349 % self.model._meta.object_name)
350 raise self.model.MultipleObjectsReturned("get() returned more than one %s -- it returned %s! Lookup parameters were %s"
351 % (self.model._meta.object_name, num, kwargs))
DoesNotExist: RealEstateAgent matching query does not exist.
最佳答案
您的代码似乎存在一些更深层次的问题,但如果没有更多信息,这些问题很难调试。然而,就您最初的问题而言,您的台词:
except MultipleObjectsReturned, e:
只会捕获 MultipleObjectsReturned
类型的异常。但是,如果您查看回溯,您会发现引发的实际异常是 DoesNotExist
异常。
如果您将异常(exception)行(上面)更改为:
except DoesNotExist, e:
它应该正确捕获该异常。
至于为什么首先引发异常,我愿意猜测您的数据库中没有该对象。您是否将其插入任何地方?如果您正在寻找一个在您尝试访问它时自动为您构建条目的后端,请查看 mongodb
。但是,如果您尝试访问不存在的对象,您当前的 SQL
数据库将会出错。
根据您在评论中所说的内容,您似乎误解了异常处理的确切含义。具体来说,当您捕获
异常时,您是在说“这是我知道可能发生的错误,并且我有一个应急案例”。
您可能会收到 MultipleObjectsReturned
异常的原因是您上面使用的 get
方法专门用于返回单个结果。如果您想查询多个条目,请使用过滤器
:
my_objects = RealEstateAgent.objects.filter(name='bh')
这将返回一个QuerySet
,其中填充了与您的查询匹配的条目。
话虽如此,由于引发了 DoesNotExist
异常,因此您关于数据库中存在五个与查询匹配的对象的假设似乎是不正确的。
为了解决您的用例,您可以很容易地按照以下方式实现一些内容:
my_objects = RealEstateAgent.objects.filter(name='bh')
if len(my_objects) > 1:
# Ask user to pick one
关于python - 使用 Django-orm 查询多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21808347/