Migrating

CUSTOM USER MODEL


Migrating to a Custom User Model

If you initially started a project using the default User model and now want to migrate to a custom User model, the process requires careful planning and execution. This section will guide you through the necessary steps to successfully migrate.

1. Create Your Custom User Model

Before migrating, ensure you have defined your custom User model properly, as shown in previous sections. Make sure to set AUTH_USER_MODEL in your settings.py:


AUTH_USER_MODEL = 'yourapp.CustomUser'

2. Create Migrations

Generate the initial migration for your custom User model:


python manage.py makemigrations

3. Backup Your Database

Before proceeding with any migration, it is crucial to back up your database to prevent data loss:


# Use your database's backup command

4. Create a Data Migration

To migrate existing user data to the new custom User model, create a data migration script. This script should copy existing user data from the default User model to your custom User model.


from django.contrib.auth import get_user_model
from django.db import migrations

def migrate_user_data(apps, schema_editor):
    User = apps.get_model('auth', 'User')
    CustomUser = get_user_model()

    for user in User.objects.all():
        custom_user = CustomUser(
            username=user.username,
            email=user.email,
            # Map other fields as necessary
        )
        custom_user.set_password(user.password)  # Retain the hashed password
        custom_user.save()

class Migration(migrations.Migration):
    dependencies = [
        ('yourapp', '0001_initial'),  # Adjust as necessary
    ]

    operations = [
        migrations.RunPython(migrate_user_data),
    ]

5. Run Migrations

After creating the data migration, execute the following command to apply all migrations:


python manage.py migrate

6. Testing the Migration

Verify that the migration was successful by checking the new custom User model and ensuring that all user data has been correctly transferred. Perform tests to confirm that authentication and permissions are functioning as expected.

Best Practices

When migrating to a custom User model, always keep security in mind. Ensure that passwords are handled securely and that data integrity is maintained throughout the process.