我正在使用此处描述的类似外观的模式:http: //django-tastypie.readthedocs.org/en/latest/non_orm_data_sources.html
def obj_get(self, request=None, **kwargs):
rv = MyObject(init=kwargs['pk'])
audit_trail.message( ... )
return rv
我不能返回 None,抛出一个错误。
我正在使用此处描述的类似外观的模式:http: //django-tastypie.readthedocs.org/en/latest/non_orm_data_sources.html
def obj_get(self, request=None, **kwargs):
rv = MyObject(init=kwargs['pk'])
audit_trail.message( ... )
return rv
我不能返回 None,抛出一个错误。
您应该提出一个异常:tastepie.exceptions.NotFound(根据代码文档)。
我正在为 CouchDB 开发美味的派,并深入研究了这个问题。在 sweetpie.resources.Resource 类中,您可以找到必须覆盖的方法:
def obj_get(self, request=None, **kwargs):
"""
Fetches an individual object on the resource.
This needs to be implemented at the user level. If the object can not
be found, this should raise a ``NotFound`` exception.
``ModelResource`` includes a full working version specific to Django's
``Models``.
"""
raise NotImplementedError()
我的例子:
def obj_get(self, request=None, **kwargs):
"""
Fetches an individual object on the resource.
This needs to be implemented at the user level. If the object can not
be found, this should raise a ``NotFound`` exception.
"""
id_ = kwargs['pk']
ups = UpsDAO().get_ups(ups_id = id_)
if ups is None:
raise NotFound(
"Couldn't find an instance of '%s' which matched id='%s'."%
("UpsResource", id_))
return ups
有一件事对我来说很奇怪。当我查看 ModelResource 类(Resource 类的超类)中的 obj_get 方法时:
def obj_get(self, request=None, **kwargs):
"""
A ORM-specific implementation of ``obj_get``.
Takes optional ``kwargs``, which are used to narrow the query to find
the instance.
"""
try:
base_object_list = self.get_object_list(request).filter(**kwargs)
object_list = self.apply_authorization_limits(request, base_object_list)
stringified_kwargs = ', '.join(["%s=%s" % (k, v) for k, v in kwargs.items()])
if len(object_list) <= 0:
raise self._meta.object_class.DoesNotExist("Couldn't find an instance of '%s' which matched '%s'." % (self._meta.object_class.__name__, stringified_kwargs))
elif len(object_list) > 1:
raise MultipleObjectsReturned("More than '%s' matched '%s'." % (self._meta.object_class.__name__, stringified_kwargs))
return object_list[0]
except ValueError:
raise NotFound("Invalid resource lookup data provided (mismatched type).")
一个异常:self._meta.object_class.DoesNotExist 在找不到对象时引发,最终成为 ObjectDoesNotExist 异常-因此在项目内部没有达成共识。
我使用来自 django.core.exceptions 的 ObjectDoesNotExist exeption
def obj_get(self, request=None, **kwargs):
try:
info = Info.get(kwargs['pk'])
except ResourceNotFound:
raise ObjectDoesNotExist('Sorry, no results on that page.')
return info