2012-04-16 2 views
1

원래 obj_get 메서드를 재정의하는 새 ModelResource를 구현해야합니다. 어떤 종류의 물건을 반환해야합니까? 장고 모델의 인스턴스? Tastypie 문서에서 잘 설명되어 있지 않습니다. Json으로 돌아가서 GET 요청을 보낸 사람에게 다시 보내고 싶은 장고 모델이 있다고 가정 해 봅시다. 어떻게 정상적으로 구현됩니까? 그냥 내가 뭘하려고 오전을 보여주는 것ModelResource obj_get은 어떻게 구현됩니까?

def obj_get(self, request=None, **kwargs): 
    return Item.objects.get(id=kwargs['pk']) 

:

나는이 코드를 가지고있다. 나는 돌아와야하는 장고 인스턴스가 아니라는 것을 알아 냈습니다. 무엇을 반환해야합니까?

답변

3

실제로 정확히 반환해야합니다. 난 당신이 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. 장고의 경우에는 후자를 추천하지 않습니다 :)

행운을 빈다!