Performance: Custom user model with AbstractUser
This affects the initial page load speed and authentication-related interactions by changing how user data is loaded and managed.
Jump into concepts and practice - no test required
from django.contrib.auth.models import AbstractUser from django.db import models class CustomUser(AbstractUser): extra_field = models.CharField(max_length=100) # Set AUTH_USER_MODEL = 'app.CustomUser' in settings.py
from django.contrib.auth.models import User from django.db import models # Adding profile info via separate model with OneToOneField class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) extra_field = models.CharField(max_length=100)
| Pattern | Database Queries | Joins | Query Latency | Verdict |
|---|---|---|---|---|
| Separate Profile Model | 2+ queries per user | 1 join per user | Higher latency due to joins | [X] Bad |
| CustomUser extends AbstractUser | 1 query per user | No joins needed | Lower latency, faster auth | [OK] Good |
AbstractUser in Django?AbstractUser provides Django's default user fields and behavior as a base class.AbstractUser in Django?AbstractUser, so the class must inherit from it.class CustomUser(AbstractUser): pass which is valid syntax.from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
age = models.PositiveIntegerField(null=True, blank=True)
# settings.py
AUTH_USER_MODEL = 'myapp.CustomUser'age?null=True and blank=True, so it is optional.AbstractUser and set AUTH_USER_MODEL in settings. After running migrations, you get an error about conflicting user models. What is the most likely cause?AUTH_USER_MODEL is set after initial migrations, Django creates default user tables causing conflicts.AUTH_USER_MODEL.bio text field to your custom user model extending AbstractUser. You also want to display this bio in Django admin user list view. Which steps should you follow?bio = models.TextField(blank=True, null=True) in your model to store user bios.list_display = ('username', 'email', 'bio') to show bio in list view.bio field to model, register custom user admin with list_display including 'bio' -> Option C