refactor `update`

admin.py is much more standardized and new functionality should be much
easier to add, but I really should run over it again and clean it up
further.