Before a save you can use is_changed() to see if there was a change, and get_diff() to get an array of the differences between the last original state (i.e. after get or the last save) and the current state. For changed relations, you'll get the PK or list of PK's of relations that have changed.