Given the DAL syntax (and usual database triggers), saying that after_update(s,f) is called with s as the set of the updated values and f as the dict passed to the update seems not hard to grasp...
given db((db.testtable.id>50) & (db.testtable.articles.contains(['a','b'])).update(somefield='aaa', otherfield='bbb') after_update will be called with s = db((db.testtable.id>50) & (db.testtable.articles.contains(['a','b'])) f = dict(somefield='aaa', otherfield='bbb') --

