Start here. This is the direct spoken answer to practice first.
Overview
Chooses a Django user model early and preserves swappable references without turning it into a profile dumping ground.
For a new Django project, I usually define a simple custom model based on AbstractUser and set AUTH_USER_MODEL before the first migration. That preserves room to change the login identifier or authentication fields later. Other models reference settings.AUTH_USER_MODEL, and runtime code uses get_user_model() rather than importing the built-in User directly. App-specific profile data can stay in related models.