首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TastyPie资源

TastyPie资源
EN

Stack Overflow用户
提问于 2013-06-15 00:00:05
回答 1查看 218关注 0票数 0

我有两个资源: UserResource和ChannelResource,如下所示:

代码语言:javascript
复制
class ChannelResource(ModelResource):

    class Meta:
        queryset = Channel.objects.all()
        resource_name = 'channels'


class UserResource(ModelResource):
    channels = fields.ToManyField(ChannelResource, 'channels', full=True)
    stories = fields.ToManyField('core.api.StoryResource', 'stories', full=True)

    class Meta:
        queryset = User.objects.all()
        resource_name = 'users'

我可以获得用户列表和单个用户的信息(包括他拥有的频道):

代码语言:javascript
复制
http://localhost/api/users/1/?format=json&limit=0
{
  channels: [
  {
    id: 1,
    identifier: "default",
    name: "default",
    resource_uri: "/api/v1/channels/1/"
  }],
  id: 1,
  name: threejeez
}

但是当我尝试获取用户的频道列表时,我得到了一个错误:

代码语言:javascript
复制
http://localhost/api/users/1/channels/?format=json&limit=0
error_message: "Invalid resource lookup data provided (mismatched type)."

我可以从上面的json中看到资源位于api/channel/,但我希望它位于api/users/1/channel。我如何才能做到这一点呢?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-15 00:56:52

终于想明白了。解决办法是……呃。不管怎么说,这就是:

代码语言:javascript
复制
def prepend_urls(self):
    return [
        url(r"^(?P<resource_name>%s)/(?P<pk>\d+)/channels%s$" % (self._meta.resource_name, trailing_slash()), self.wrap_view('get_channels'), name="api_get_channels"),
    ]

def get_channels(self, request, **kwargs):
    basic_bundle = self.build_bundle(request=request)
    obj = self.cached_obj_get(bundle=basic_bundle, **self.remove_api_resource_names(kwargs))
    channel_resource = UserChannelResource()
    try:
        channel_resource._meta.queryset = obj.channels.all()
    except IndexError:
        channel_resource._meta.queryset = Channel.objects.none()

    return channel_resource.get_list(request)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17112656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档