TastyPie中的嵌套资源

时间:2013-08-21 12:08:43

标签: django 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)

现在我的具体用例是拥有/api/v1/schools/<school_id>/departments之类的网址以及这样做的目的是获取属于具有特定ID的departments的{​​{1}}列表。如果学校有1个部门,一切正常,但如果学校有2个以上的部门,我会收到错误消息school

在传递资源ID时,TastyPie不支持资源列表,或者如何解决此问题?

1 个答案:

答案 0 :(得分:1)

您只需要替换

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

通过

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