Thanks. I couldn't find any clear documentation on when django writes out changes to _set and I added the save here to try to fix the bug which ended up being the object identity bug (the del below affecting a different instance of the user object than the one passed into has_user). I left the save in figuring it wasn't hurting anything.

The real question is which save calls should remain? The app code is inconsistent. It seems odd to me that any caller to roles.py should need to call save on the user; so, my inclination is to remove all of those save calls.