I was tweaking around with making an email address only User model (sans username) while still retaining the permissions stuff and ran into a small issue. I can fix it but it might need to be documented.
I copied over the entire AbstractUser of
django.contrib.auth.models.py, made my changes I needed and just for fun changed 'user_permissions' to just 'permissions' because I liked the name in the database to be 'account_user_permissions' instead of 'account_user_user_permissions'
When I went to run it, line 44 of ModelBackend died because there is a hard reference to 'user_permissions' in the line:
user_obj._perm_cache = set(["%s.%s" % (p.content_type.app_label, p.codename) for p in user_obj.user_permissions.select_related()])
The only fix I could come up with quickly was to copy out the entire ModelBackend and fix it there. I am probably an idiot and just not know the better way to fix this.