実際、それはまさにあなたが返すべきものです。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
満たすアイテムのリストを取得するためにを使用し、 1 つのアイテムのみを取得することを望んでいます。そのような場合、それらは最初の (そしてそのリストの唯一の項目) を返します。それ以外の場合は、例外が発生します。ただし、Django の場合のリストは単なるクエリセットです。kwargs
pk
一般obj_get
に、リソース属性に対応するプロパティを持つオブジェクトを返す必要があります。この良い例は、「Riak を MessageResource に使用する」に示されています。この例では、辞書がRiakObject
クラスにラップされているため、代わりにTastypie で必要とされるobj[ 'attribute' ]
ことを行うことができます(したがって、Django モデル インスタンスが機能します)。obj.attribute
要約すると、Django モデル インスタンスを返すことができます。または、余分な作業が必要でパフォーマンスを低下させたい場合は、モデル インスタンス属性から辞書を作成し、RiakObject
上記のようにクラスにラップすることができます。Djangoの場合、後者はお勧めしません:)
幸運を!