2012-02-27 5 views
4

フィールドがfullのapi URLにある必要がある場合は強制的に方法がありますか?例えばtastypieのURLにフィールドがいっぱいになるように切り替えますか?

、今あなたが行うことで、フィールドが一杯になった場合の選択:

example.com/api/foo/?foo__full=false 

または

class FooResource(ModelResource): 
    foo = fields.ForeignKey(FooFooResource, 'foo', full=True) 

は以下のような何かをすることによって、URLでfullを上書きすることが可能です

example.com/api/foo/?foo__full=true 

答えて

4

これはそれを動作させるためのコードです:

class RelatedResource(ModelResource): 
    user = fields.ToOneField(UserResource, 'user') 

    class Meta: 
     queryset = Related.objects.all() 
     resource_name = 'related' 


class UserResource(ModelResource): 
    related = fields.ToOneField(RelatedResource, 'related', full=False) # Default is false 

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

    def dehydrate(self, bundle): 
     show_full = bundle.request.GET.get('full', "false").lower() == "true" 
     if show_full: 
      old_full = self.related.full 
      self.related.full = True 
      bundle.data['related'] = self.related.dehydrate(bundle) 
      self.related.full = old_full 
     return bundle 

私は変更を加えるために要旨を作成しました:https://gist.github.com/2897326

+2

私は@santiagobasulto答え大幅に改善し、このためのダイナミックな水和物の方法を作りました。ここに要点があります:https://gist.github.com/MRHarrison/c810c27d3c5259a3b4e7 –

0

ここはGithubの回答です:

今のところこれを行う方法はありません。脱水でif bundle.request.GET.get('foo__full', True) == Falseをチェックして、bundle.dataのデータを交換するだけで可能です。しかし、コードの少しを取る。

関連する問題