2012-08-31 28 views
0

我試圖寫一個Django TemplateView,基於tastypie的規範資源返回一個上下文參數「數據」包含JSON包:Tastypie建築數據從canonical_resource_for(「對象」)

資源

class FooResource(ModelResource): 
    bars = fields.ToManyField('app.api.v1.resources.BarResource', 'bars', null=True, full=True) 

    class Meta: 
     queryset = Foo.objects.all() 
     resource_name = 'foo' 
     # ... 

模式

class FooDetailView(TemplateView): 
    template_name = 'app/foo_detail.html' 

    def get_detail(self, slug): 
     foo_resource = v1_api.canonical_resource_for('foo') 

     try: 
      foo = foo_resource.cached_obj_get(slug=slug) 
     except Foo.DoesNotExist: 
      raise Http404 

     bundle = foo_resource.full_dehydrate(foo_resource.build_bundle(obj=foo)) 
     return bundle.data 

    def get_context_data(self, **kwargs): 
     base = super(FooDetailView, self).get_context_data(**kwargs) 
     base['data'] = self.get_detail(base['params']['slug']) 
     return base 

這工作,howeve r Foo和Bar之間的相反關係似乎沒有被手動過程序列化。該TemplateView返回這些字符串,這裏的響應:

{ 
    'title': u'I am Foo.title', 
    'bars': [<Bundle for obj: '1' and with data: '{'title': u'I am Bar.title'}'] 
} 

那麼,問題,我怎麼遍歷反向關係建設束時?

回答

0

答案是脫水

def get_detail(self, slug): 
    qr = v1_api.canonical_resource_for('question') 
    try: 
     question = qr.cached_obj_get(slug=slug) 
    except Question.DoesNotExist: 
     raise Http404 

    bundle = qr.full_dehydrate(qr.build_bundle(obj=question)) 

    # create response 
    desired_format = qr.determine_format(self.request) 
    serialized = qr.serialize(self.request, bundle, desired_format) 
    return serialized 
後運行通過resource.serializer捆綁