是否可以哄骗Django为DoesNotExist
错误提供更多信息?
例如,如果它们包含查询,它将真的很好......类似于:
>>> Foo.objects.get(id="example_id")
...
DoesNotExist: No objects matching id="example_id" found
答案 0 :(得分:2)
当然,你可以获得Django已执行的SQL。
请参阅http://docs.djangoproject.com/en/dev/faq/models/#how-can-i-see-the-raw-sql-queries-django-is-running
答案 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 >>>
答案 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)