2013-08-21 4 views
0

제공된 두 예제를 사용하여 TastyPie에서 중첩 리소스를 구현하려고했습니다. 그 중 하나가 실패하고 어떻게 또는 왜, 그리고 그들 중 하나가 다소 잘 작동하지 않습니다.TastyPie의 중첩 된 리소스

class ParentResource(ModelResource): 
    children = fields.ToManyField(ChildResource, 'children') 

    def prepend_urls(self): 
     return [ 
      url(r"^(?P<resource_name>%s)/(?P<pk>\w[\w/-]*)/children%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('get_children'), name="api_get_children"), 
     ] 

    def get_children(self, request, **kwargs): 
     try: 
      bundle = self.build_bundle(data={'pk': kwargs['pk']}, request=request) 
      obj = self.cached_obj_get(bundle=bundle, **self.remove_api_resource_names(kwargs)) 
     except ObjectDoesNotExist: 
      return HttpGone() 
     except MultipleObjectsReturned: 
      return HttpMultipleChoices("More than one resource is found at this URI.") 

     child_resource = ChildResource() 
     return child_resource.get_detail(request, parent_id=obj.pk) 

이제 내 구체적인 사용 사례는이 어떻게 할 것인지의 school에 속하는 departments의 목록을 얻을 수 있습니다 /api/v1/schools/<school_id>/departments 같은 URL을 사용하는 것입니다 :

내가 사용했습니다 냈다 코드입니다 특정 ID로 학교에 부서가 1 개있는 경우 모든 것이 작동하지만 학교에 2 개 이상의 부서가있는 경우 오류 메시지가 표시됩니다. More than one resource is found at this URI.

TastyPie는 리소스 ID를 전달할 때 리소스 목록을 지원하지 않습니까?

답변

1

당신은

return child_resource.get_list(request, parent_id=obj.pk) 
으로

return child_resource.get_detail(request, parent_id=obj.pk) 

를 교체해야