Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is the purpose of creating a custom user model by extending AbstractUser in Django?
Extending AbstractUser allows you to add extra fields or methods to the default user model while keeping Django's built-in authentication features intact.
Click to reveal answer
beginner
Which Django setting must be updated to use a custom user model?
You must set AUTH_USER_MODEL in your settings.py to point to your custom user model, e.g., 'myapp.CustomUser'.
Click to reveal answer
intermediate
How do you add a new field, like 'age', to a custom user model extending AbstractUser?
Define the new field in your custom user model class, for example: age = models.PositiveIntegerField(null=True, blank=True).
Click to reveal answer
intermediate
Why should you create a custom user model at the start of a Django project?
Because changing the user model later is complicated and can cause database issues. Starting with a custom model gives flexibility for future changes.
Click to reveal answer
beginner
What command do you run after creating or changing a custom user model to update the database?
Run 'python manage.py makemigrations' to create migration files, then 'python manage.py migrate' to apply changes to the database.
Click to reveal answer
What base class should you extend to create a custom user model with extra fields in Django?
AAbstractUser
BUserManager
CBaseUser
DModel
✗ Incorrect
AbstractUser provides the full user model with Django's authentication features, making it easy to add extra fields.
Where do you specify your custom user model in a Django project?
AINSTALLED_APPS
BMIDDLEWARE setting
CDATABASES setting
DAUTH_USER_MODEL setting
✗ Incorrect
AUTH_USER_MODEL tells Django which user model to use for authentication.
Which of these is a correct way to add a new field 'nickname' to a custom user model?
A nickname is text, so CharField with max_length is appropriate.
What happens if you change the user model after running migrations without proper planning?
ANo effect, changes apply smoothly
BDatabase errors and migration conflicts
CDjango automatically updates everything
DUser data is deleted automatically
✗ Incorrect
Changing the user model after migrations can cause serious database and migration issues.
Which command applies database changes after modifying your custom user model?
Apython manage.py migrate
Bpython manage.py makemigrations
Cpython manage.py runserver
Dpython manage.py collectstatic
✗ Incorrect
The migrate command applies the migration files to the database.
Explain how to create a custom user model by extending AbstractUser in Django and what steps are needed to use it.
Think about model creation, settings update, and database migration.
You got /4 concepts.
Why is it important to decide on a custom user model early in a Django project?
Consider the impact on database and project structure.
You got /4 concepts.
Practice
(1/5)
1. What is the main reason to create a custom user model by extending AbstractUser in Django?
easy
A. To add extra fields or change user behavior while keeping Django's default features
B. To remove all default user features and start from scratch
C. To automatically create admin users without configuration
D. To avoid using migrations in the project
Solution
Step 1: Understand AbstractUser purpose
AbstractUser provides Django's default user fields and behavior as a base class.
Step 2: Reason for extending AbstractUser
Extending it allows adding custom fields or changing behavior without losing built-in features.
Final Answer:
To add extra fields or change user behavior while keeping Django's default features -> Option A
Quick Check:
Custom user model = Extend AbstractUser for extra fields [OK]
Hint: AbstractUser keeps defaults; extend it to add fields [OK]
Common Mistakes:
Thinking AbstractUser removes default features
Believing custom user models skip migrations
Assuming admin users are auto-created
2. Which of the following is the correct way to declare a custom user model by extending AbstractUser in Django?
easy
A. class CustomUser(AbstractBaseUser):\n pass
B. class CustomUser(User):\n pass
C. class CustomUser(models.Model):\n pass
D. class CustomUser(AbstractUser):\n pass
Solution
Step 1: Identify correct base class
The question asks for extending AbstractUser, so the class must inherit from it.
Step 2: Check syntax correctness
class CustomUser(AbstractUser):\n pass correctly defines class CustomUser(AbstractUser): pass which is valid syntax.
Final Answer:
class CustomUser(AbstractUser):\n pass -> Option D
Quick Check:
Extend AbstractUser with class CustomUser(AbstractUser) [OK]
Hint: Use AbstractUser as base class for custom user model [OK]
Common Mistakes:
Using User instead of AbstractUser as base
Inheriting directly from models.Model without user features
Confusing AbstractBaseUser with AbstractUser
3. Given this custom user model:
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'
What will happen if you try to create a user without specifying age?
medium
A. User creation fails due to missing age field
B. User is created successfully with age set to None
C. User is created but age defaults to 0
D. Error because age is required
Solution
Step 1: Analyze age field definition
Age is defined as PositiveIntegerField with null=True and blank=True, so it is optional.
Step 2: Understand user creation behavior
Since age is optional, creating a user without it sets age to None (null in database).
Final Answer:
User is created successfully with age set to None -> Option B
Quick Check:
Optional field with null=True allows missing value [OK]
Hint: null=True means field can be empty on creation [OK]
Common Mistakes:
Assuming blank=True means field is required
Thinking missing fields default to 0 automatically
Confusing null=True with default values
4. You created a custom user model extending 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?
medium
A. You set AUTH_USER_MODEL after initial migrations were created
B. You forgot to import AbstractUser in your model
C. You did not define a primary key in your custom user model
D. You used AbstractBaseUser instead of AbstractUser
Solution
Step 1: Understand migration timing
If AUTH_USER_MODEL is set after initial migrations, Django creates default user tables causing conflicts.
Step 2: Identify cause of conflict error
The conflict arises because two user models exist: default and custom, due to late setting of AUTH_USER_MODEL.
Final Answer:
You set AUTH_USER_MODEL after initial migrations were created -> Option A
Quick Check:
Set AUTH_USER_MODEL before first migration [OK]
Hint: Set AUTH_USER_MODEL before first migration to avoid conflicts [OK]
Common Mistakes:
Ignoring migration order importance
Assuming import errors cause this conflict
Confusing AbstractUser with AbstractBaseUser issues
5. You want to add a 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?
hard
A. Add bio field to model, override save() to print bio
B. Add bio field to model, no admin changes needed
C. Add bio field to model, register custom user admin with list_display including 'bio'
D. Add bio field to model, create a new admin site
Solution
Step 1: Add bio field to custom user model
Define bio = models.TextField(blank=True, null=True) in your model to store user bios.
Step 2: Customize admin to show bio
Register your custom user model admin and set list_display = ('username', 'email', 'bio') to show bio in list view.
Final Answer:
Add bio field to model, register custom user admin with list_display including 'bio' -> Option C
Quick Check:
Model field + admin list_display shows field [OK]
Hint: Add field + update admin list_display to show it [OK]
Common Mistakes:
Forgetting to update admin list_display
Overriding save() unnecessarily
Creating new admin site instead of customizing existing