Django — Detect what fields have been changed / modified on save.

How to detect which fields have been changed upon saving a model.

I just needed a quick way to detect which fields have been changed as a convenience for a team.

This is what I came up with.

Is it too expensive to do comparisons like this?

Please let me know if you have any suggestions.


    def __init__(self, *args, **kwargs):
        super(Order, self).__init__(*args, **kwargs)
        self._initial_data = self.__dict__.copy()

    def detect_changed(self, user='System'):
        changed = [k for k, v in self._initial_data.iteritems() \
                        if v != self.__dict__[k] and k not in ('log','activity','_state',)]
        if changed:
            self._activity("%s changed %s" % (user.first_name, str(changed).replace('[','').replace(']','') ) )

1 Comment

  1. Wolf says:

    This is just awesome!!

Leave a reply to Wolf Cancel reply