Работая с профилями пользователей в Django (да и в любых других веб-фреймворках) сразу становится видно насколько использование фрейворков ограничивает разработчика рамками которые авторы заложили в фреймворк.
Дефолтный модуль django.contrib.auth реализует отличную систему управления пользователями на основе учётных записей, групп и прав доступа. Но практически всегда требуется расширения модели по умолчанию, хотя бы добавлением аватарки пользователя и для этого в Django есть много способов, которые необходимо изучить, чтобы выбрать какой использовать для себя.
Самый примитивный способ, это создание новой модели связанной с моделью django.contrib.auth.models.User
Если вы админ локалхоста и на вашем сайте ни кого кроме вас и гостей не бывает, то наверняка подойдёт способ описываемый в последний документации к Django, по сути там не расширяется модель по умолчанию, а создаётся новая, примитивная, без групп и прав, за то с аватаркой.
Расширение стандартной модели позволяет сохранить функционал, который, как и всегда, являясь сильной стороной в то же время является и слабым местом. Желание сохранить мощный функциона django.contrib.auth приводит к тому, что нужно вписываться в его архитектуру, ограничивая полёт фантазии
Расширяется модель нужно через наследование класс User, затем нужно создать свой бакенд, подключить и связать его со своим производным классом в настройках проекта