2013-06-14 5 views
0

나는 두 자원이TastyPie 자원

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' 
내가 (채널 그가 소유 포함) 단일 사용자에 대한 사용자 목록과 정보를 얻을 수 있습니다

:

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 
} 

하지만 사용자에 대한 채널 목록을 얻으려고하면 오류가 발생합니다.

http://localhost/api/users/1/channels/?format=json&limit=0 
error_message: "Invalid resource lookup data provided (mismatched type)." 

위의 json에서 알 수 있습니다. 리소스가 api/channels /에 있지만 api/users/1/channels에 있어야합니다. 이것을 어떻게 할 수 있습니까?

감사합니다.

답변

1

마지막으로 알아 냈습니다. 해결책은 .... 우. 어쨌든 여기에 있습니다 :

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)