Hmm, slightly confused here. Does this require that `self.metadata` is some sort of object that keeps track of fields that are changed? What makes that happen?