              # Set up the field
              field.initialize(parent=self, field_name=key)
  
          # Add in the default fields
          for key, val in self.default_fields.items():
              if key not in ret:
                  ret[key] = val
  
          # If 'fields' is specified, use those fields, in that order.
          if self.opts.fields:
 
</s> remove         # TODO: refactor this so we're not determining the fields again
        fields = self.get_fields()

        for field_name, field in fields.items():
 </s> add         for field_name, field in self.serialize_fields.items(): </s> remove         fields = self.get_fields()
        for field_name, field in fields.items():
 </s> add         for field_name, field in self.serialize_fields.items(): </s> remove         for field_name, field in fields.items():
 </s> add         for field_name, field in self.serialize_fields.items(): </s> remove         fields = self.get_fields()
 </s> add  </s> remove         self.default_fields = self.get_default_fields()
 </s> add         self.serialize_fields = self.get_fields()
        for key, val in self.get_default_fields().items():
              # Set up the field
              field.initialize(parent=self, field_name=key)
  
          # Add in the default fields
        for key, val in self.get_default_fields().items():
              if key not in ret:
                  ret[key] = val
  
          # If 'fields' is specified, use those fields, in that order.
          if self.opts.fields:
keep keep keep keep replace keep keep keep keep keep
 Cache all fields on serializer init, not just default fields. 
rest_framework/serializers.py