首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Django-orm查询多个对象

用Django-orm查询多个对象
EN

Stack Overflow用户
提问于 2014-02-16 07:07:54
回答 1查看 3K关注 0票数 2

RealEstateAgent是一个模型,执行RealEstateAgent.objects.filter(name = 'better homes')将返回5个对象。

我想使用RealEstateAgent.objects.get(name='better homes')来捕获MultipleObjectsReturned异常。

我正在尝试,但例外是不被抓到。

代码语言:javascript
复制
from django.core.exceptions import MultipleObjectsReturned
try:
  RealEstateAgent.objects.get(name='bh')
except MultipleObjectsReturned, e:
  print ''

这是回溯:

代码语言:javascript
复制
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.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-16 07:17:25

您的代码似乎存在一些更深层次的问题,但是如果没有更多的信息,这些问题就很难调试。然而,就你最初的问题而言,你的台词是:

代码语言:javascript
复制
except MultipleObjectsReturned, e:

将只捕获MultipleObjectsReturned类型的异常。但是,如果查看跟踪,就会发现引发的实际异常是DoesNotExist异常。

如果将除外行(上面)更改为:

代码语言:javascript
复制
except DoesNotExist, e:

它应该能正确地抓住这个例外。

至于为什么会首先引发异常,我愿意猜测您的数据库中没有这个对象。你把它插到哪里了吗?如果您正在寻找一个后端,当您尝试访问它时,它将自动为您构造一个条目,请查看mongodb。但是,如果尝试访问不存在的对象,则当前的SQL数据库将出错。

根据您在评论中所说的,您似乎误解了异常处理的确切含义。特别地,当您catch一个异常时,您是在说“这是一个我知道可能发生的错误,而且我有一个应急情况”。

您可能会得到MultipleObjectsReturned异常的原因是,上面使用的get方法专门用于返回单个结果。如果要查询多个条目,则可以使用filter

代码语言:javascript
复制
my_objects = RealEstateAgent.objects.filter(name='bh')

它将返回一个包含与查询匹配的条目的QuerySet

尽管如此,由于正在引发DoesNotExist异常,您认为数据库中有五个对象匹配查询的假设似乎是不正确的。

为了解决您的用例,您可以很容易地实现以下内容:

代码语言:javascript
复制
my_objects = RealEstateAgent.objects.filter(name='bh')
if len(my_objects) > 1:
    # Ask user to pick one
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21808347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档