实际上,这正是您应该返回的。我建议你看看 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 类中,这样您就可以使用 Tastypie 所需的 obj.attribute 而不是 obj.attribute(因此 Django 模型实例将起作用)。
总而言之,您可以返回一个 Django 模型实例,或者如果您需要一些额外的工作并希望降低性能,您可以使用模型实例属性构建字典并将它们包装在类中,例如 @ 987654331@ 上面提到。我不推荐后者,但如果是 Django :)
祝你好运!