2016-08-21 61 views
0

目前我有:刪除字段參數

class PlayerSerializer(serializers.HyperlinkedModelSerializer): 
    id = serializers.ReadOnlyField() 

    class Meta: 
     model = Player 

    def __init__(self, *args, **kwargs): 
     super(PlayerSerializer, self).__init__(*args, **kwargs) 

     self.is_full = self.context['request'].query_params.get('full', False) 

     if not self.is_full: 
      base_fields = ['nation', 'club', 'slug', 'common_name', 'image', 'position', 'quality', 'overall_rating', 
          'card_att_1', 'card_att_2', 'card_att_3', 'card_att_4', 'card_att_5', 'card_att_6'] 

      for field in self.fields: 
       if field not in base_fields: 
        self.fields.pop(field) 

     self.fields['nation'] = NationSerializer(is_full=self.is_full) 
     self.fields['league'] = LeagueSerializer(is_full=self.is_full) 
     self.fields['club'] = ClubSerializer(is_full=self.is_full) 

,工作正常,但ClubSerializer具有

class ClubSerializer(serializers.HyperlinkedModelSerializer): 
    id = serializers.ReadOnlyField() 
    league = LeagueSerializer() 

,我想這LeagueSerializer有這些字段基於請求的值查詢參數。是不是將它作爲kwarg傳遞並對每個串行器單獨進行self.is_full = self.context['request'].query_params.get('full', False)檢查?

回答

1

我把這個檢查放在每個序列化程序中,所以即使我不是手動構建序列化程序(例如在ViewSet s),邏輯也能正常工作。

+0

是的,我認爲我發佈後發佈這個我有點橡皮鴨的時刻,謝謝:) –

+0

沒關係我只是意識到,ForeignKeys('League = LeagueSerializer()')沒有'self.context ['request']'能夠做檢查。 –

+0

爲什麼不呢?每個序列化器都會將'request'作爲上下文的一部分。只要放一個像這樣的構造函數 - 「def __init __(self,* args,** kwargs):'並確保你調用'super',並且你將'context'作爲'context = kwargs.get('context',None )'和'context'會有'request'。 'request = kwargs ['context'] ['request']' – masnun