实际上,这正是您应该返回的。我建议你看看 Tastypie 的实现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.get_object_list
获取符合条件的项目列表(在这种情况下kwargs
应该包含pk
),并且希望只获得一个项目。在这种情况下,他们返回第一个(也是该列表中唯一的项目)。否则会引发异常。不过,Django 的列表只是一个查询集。
一般来说 -obj_get
应该返回一个具有与资源属性相对应的属性的对象。Using Riak for MessageResource中给出了一个很好的例子,其中一个字典被包装在RiakObject
类中,这样obj[ 'attribute' ]
你就可以做obj.attribute
Tastypie 所需的操作(因此 Django 模型实例将起作用)。
总而言之,您可以返回一个 Django 模型实例,或者如果您需要一些额外的工作并且想要降低性能,您可以使用模型实例属性构建字典并将它们包装在RiakObject
上面提到的类中。我不推荐后者,但在 Django 的情况下 :)
祝你好运!