×
   ❮   
PYTHON FOR DJANGO DJANGO FOR BEGINNERS DJANGO SPECIFICS PAYMENT INTEGRATION API BASICS Roadmap
     ❯   

CUSTOM USER MODEL

Custom User Model home

Custom User in Django

In many Django projects, the default User model provided by Django may not meet all the requirements for your application. In such cases, Django allows you to customize or extend the User model to fit your needs.

Why Customize the User Model?

The default User model includes basic fields like username, email, first_name, and last_name. However, you may need to add fields like a phone number or a profile picture. Customizing the User model gives you the flexibility to adapt the User model to your project’s specific needs.

Options for Customizing the User Model

  • Extending the AbstractUser class: This option allows you to extend the default User model, adding new fields while retaining Django's built-in features like authentication and permissions.
  • Using AbstractBaseUser: This gives you full control over the User model but requires you to define more fields and methods yourself, such as username and password handling.

Creating a Custom User Model

To create a custom User model, you'll typically start by extending Django's AbstractUser or AbstractBaseUser. Here’s how you can do that:


from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    phone_number = models.CharField(max_length=15, blank=True)
    profile_picture = models.ImageField(upload_to='profile_pics/', null=True, blank=True)

    def __str__(self):
        return self.username

Once you've defined your custom User model, update your settings.py file to use it:


AUTH_USER_MODEL = 'yourapp.CustomUser'

Adding Additional Fields

You can easily add new fields such as a phone number or profile picture, as shown in the example above. Any additional fields can be handled like any other Django model field.

Handling Authentication with Custom User

When using a custom User model, authentication will continue to work as expected, but you need to ensure that you’re using Django’s built-in views correctly. Make sure your settings reflect the custom User model:


# In settings.py
AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
]

Django’s authentication views, like LoginView and LogoutView, will still work with your custom User model.

Creating and Managing Superusers

To create a superuser with the custom User model, you can use the createsuperuser command, just like with the default User model. If you added custom fields, ensure that they are handled properly during superuser creation:


python manage.py createsuperuser

Migrating to a Custom User Model

If you are working on an existing project and need to migrate from the default User model to a custom one, you need to carefully plan this process. Switching to a custom User model after you’ve created the database can be tricky and may involve migrating user data.

Testing the Custom User Model

After implementing the custom User model, it’s crucial to thoroughly test the authentication, registration, and user-related features in your project. Ensure that custom fields are handled correctly during form submissions and updates.

By customizing the User model, you gain flexibility in managing user data while retaining Django's powerful authentication features.


Django-tutorial.dev is dedicated to providing beginner-friendly tutorials on Django development. Examples are simplified to enhance readability and ease of learning. Tutorials, references, and examples are continuously reviewed to ensure accuracy, but we cannot guarantee complete correctness of all content. By using Django-tutorial.dev, you agree to have read and accepted our terms of use , cookie policy and privacy policy.

© 2024 Nischal Lamichhane. All Rights Reserved.
Django-tutorial.dev is styled using Bootstrap 5.
And W3.CSS.