Django:DoesNotExist错误更多有用的错误消息?

时间:2010-11-15 23:53:10

标签: django django-models

是否可以哄骗Django为DoesNotExist错误提供更多信息?

例如,如果它们包含查询,它将真的很好......类似于:

>>> Foo.objects.get(id="example_id")
...
DoesNotExist: No objects matching id="example_id" found

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

正如@Jeeyoung所证明的那样,无法对DoesNotExist错误进行反省以获得所使用的参数......所以我编写了一个小函数,它修补objects.get,捕获DoesNotExists并添加查询错误:

>>> class MyModel(m.Model):
...     pass
...
>>> patch_objects_get(MyModel)
>>> MyModel.objects.get(id=3141)
Traceback (most recent call last):
...
DoesNotExist: MyModel matching {"id": 42} does not exist
>>>

代码位于https://gist.github.com/702513

答案 2 :(得分:1)

我正在查看get()的代码,并找到了以下内容

raise self.model.DoesNotExist("%s matching query does not exist."
    % self.model._meta.object_name)
raise self.model.MultipleObjectsReturned("get() returned more than one %s -- it returned %s! Lookup parameters were %s"
    % (self.model._meta.object_name, num, kwargs))

所以我猜没有好的方法可以反省异常。

您可以执行Felix Kling为get()做的建议(编写包装器方法)。您甚至可以通过以下方式使其更具通用性:

def my_get(*args, **kwargs):
    try:
        Foo.object.get(*args, **kwargs)
    except Foo.DoesNotExist:
        print "No object matching conditions (*%s, **%s) found." % (args, kwargs)