There are two modern ways to create a custom user model in Django:
AbstractBaseUser. In both cases we can subclass them to extend existing functionality however
AbstractBaseUser requires much, much more work. So here we will use
AbstractUser. We will also create a UserProfile model to store additional information of user with the help of One-To-One Link. After this we will extend the BaseUserManager functionality a little-bit. We will also configure signals to automatically create UserProfile whenever an User object is created. Finally we will customize django admin.
Read full article here: https://raturi.in/blog/how-extend-django-user-model/