Index: django/contrib/admin/options.py
===================================================================
--- django/contrib/admin/options.py	(revision 11499)
+++ django/contrib/admin/options.py	(working copy)
@@ -562,6 +562,14 @@
         """
         formset.save()
 
+    def model_modified(self, request, changeType):
+        """
+        A hook to allow actions to happen on the modification of data.
+
+        changeType values: add, change, delete
+        """
+        pass
+        
     def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
         opts = self.model._meta
         app_label = opts.app_label
@@ -736,6 +744,7 @@
                 for formset in formsets:
                     self.save_formset(request, form, formset, change=False)
 
+                self.model_modified(request, 'add')
                 self.log_addition(request, new_object)
                 return self.response_add(request, new_object)
         else:
@@ -832,6 +841,7 @@
                 for formset in formsets:
                     self.save_formset(request, form, formset, change=True)
 
+                self.model_modified(request, 'change')
                 change_message = self.construct_change_message(request, form, formsets)
                 self.log_change(request, new_object, change_message)
                 return self.response_change(request, new_object)
@@ -929,6 +939,7 @@
                         obj = self.save_form(request, form, change=True)
                         self.save_model(request, obj, form, change=True)
                         form.save_m2m()
+                        self.model_modified(request, 'change')
                         change_msg = self.construct_change_message(request, form, None)
                         self.log_change(request, obj, change_msg)
                         changecount += 1
@@ -1017,6 +1028,7 @@
             self.log_deletion(request, obj, obj_display)
             obj.delete()
 
+            self.model_modified(request, 'delete')
             self.message_user(request, _('The %(name)s "%(obj)s" was deleted successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj_display)})
 
             if not self.has_change_permission(request, None):
