실제로 정확히 반환해야합니다. 난 당신이 obj_get
의 Tastypie의 구현을 살펴 것이 좋습니다
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).")
당신은 그들이 (pk
을 포함해야이 경우 kwargs
에) 기준을 충족 항목의 목록을 얻을 self.get_object_list
를 사용하여 얻을 수 있었으면하는 볼 수 있듯이 단 하나의 항목. 그런 경우에는 첫 번째 (그리고 그 목록의 유일한 항목)를 반환합니다. 그렇지 않으면 예외가 발생합니다. Django의 경우 목록은 단순히 queryset입니다.
일반적으로 obj_get
은 자원 속성에 해당하는 속성을 가진 객체를 반환해야합니다. 좋은 예가 Using Riak for MessageResource인데 여기에서 대신 클래스를 래핑하면이 Tastypie에 필요합니다. 따라서 Django 모델 인스턴스가 작동합니다.
요약하면 Django 모델 인스턴스를 반환하거나 추가 작업을 원하고 성능을 악화시키려는 경우 모델 인스턴스 속성에서 사전을 빌드하고 클래스와 같은 클래스로 래핑 할 수 있습니다 상술 한 RiakObject
. 장고의 경우에는 후자를 추천하지 않습니다 :)
행운을 빈다!
출처
2012-04-17 10:48:43
kgr