У меня был клиент с коммерческим сайтом, который работал с 1995 года (да, мы говорим здесь с ранними последователями). В любом случае, у них уже была установленная база пользователей, и имена были полностью несовместимыми с идеей Django о имени пользователя.
Я посмотрел на несколько способов справиться с этим, и все они были похожи на хаки (это было летом 2007 года), поэтому я сказал, что привинтил его и взломал contrib.auth.models.User напрямую. Мне нужно было всего лишь изменить около 10 строк кода, увеличить размер поля и настроить валидатор. С тех пор мы сделали два обновления - 0.97-pre => 1.0 и 1.0 => 1.1.1 - и каждый раз для «переноса хака» требуется всего около 15 минут.
Это не красиво, и я могу сгореть в аду за то, что сделал это таким образом, но потребовалось меньше времени, чтобы сделать это таким образом, чем все остальное, что я мог выяснить, и форвардные порты были абсолютно не проблема