📖 Scenario: You are building a simple Django app to manage a list of books in a library. Each book needs a unique identifier so you can find it easily.
🎯 Goal: Create a Django model called Book with a primary key field and a title field. Understand how Django automatically creates a primary key if you don't specify one, and how to define your own primary key.
📋 What You'll Learn
Create a Django model named Book with a title field
Understand Django's default primary key behavior
Add a custom primary key field named isbn as a CharField
Use the primary_key=True attribute on the isbn field
💡 Why This Matters
🌍 Real World
Managing unique identifiers for records in a database is essential in real-world apps like libraries, stores, or user management.
💼 Career
Understanding primary keys is fundamental for backend developers working with databases and Django models.
Progress0 / 4 steps
1
Create the Book model with a title field
Create a Django model class called Book with a title field of type CharField with max length 100.
Django
Hint
Use class Book(models.Model): and add title = models.CharField(max_length=100) inside.
2
Add a custom primary key field named isbn
Add a field called isbn to the Book model as a CharField with max length 13 and set primary_key=True.
Django
Hint
Define isbn = models.CharField(max_length=13, primary_key=True) inside the Book class.
3
Explain Django default primary key behavior
Add a comment above the Book class explaining that Django automatically adds an id field as primary key if none is specified.
Django
Hint
Write a comment starting with # Django automatically adds an 'id' field above the class.
4
Add __str__ method to display book title
Add a __str__ method to the Book model that returns the title field.
Django
Hint
Define def __str__(self): and return self.title inside it.
Practice
(1/5)
1. What does Django do if you do not specify a primary key in your model?
easy
A. Uses the first field defined as the primary key.
B. Automatically adds an id field as the primary key.
C. Raises an error and refuses to create the model.
D. Requires you to manually add a primary key later.
Solution
Step 1: Understand Django's default behavior
Django automatically adds an id field as a primary key if none is specified.
Step 2: Confirm no error or manual step needed
No error is raised and no manual primary key is required by default.
Final Answer:
Automatically adds an id field as the primary key. -> Option B
Quick Check:
Default primary key = id field [OK]
Hint: Remember: Django adds id automatically if no primary key [OK]
Common Mistakes:
Thinking Django raises an error without a primary key
Assuming first field is primary key by default
Believing manual primary key is always required
2. Which of the following is the correct way to set a field as the primary key in a Django model?
easy
A. name = models.CharField(max_length=100, primary_key=True)
B. name = models.CharField(max_length=100, key_primary=True)
C. name = models.CharField(max_length=100, primary=True)
D. name = models.CharField(max_length=100, is_primary=True)
Solution
Step 1: Identify correct keyword argument
The correct argument to set a primary key is primary_key=True.
Step 2: Match with options
Only name = models.CharField(max_length=100, primary_key=True) uses primary_key=True correctly.
Final Answer:
name = models.CharField(max_length=100, primary_key=True) -> Option A
Quick Check:
Use primary_key=True to set primary key [OK]
Hint: Use primary_key=True exactly to set primary key [OK]
Common Mistakes:
Using incorrect argument names like primary=True
Confusing primary_key with other flags
Misspelling primary_key
3. Given this model:
class Product(models.Model):
sku = models.CharField(max_length=20, primary_key=True)
name = models.CharField(max_length=100)
p = Product(sku='X123', name='Widget')
p.save()
print(Product.objects.get(pk='X123').name)
What will be printed?
medium
A. None
B. X123
C. Error: No primary key field found
D. Widget
Solution
Step 1: Understand primary key usage
The sku field is set as primary key, so pk='X123' looks up by sku.
Step 2: Trace the query result
The object with sku 'X123' has name 'Widget', so printing .name outputs 'Widget'.
Final Answer:
Widget -> Option D
Quick Check:
Primary key lookup returns object name [OK]
Hint: pk uses the primary key field, here sku, to find object [OK]
Common Mistakes:
Assuming pk means id field always
Expecting error because id field missing
Confusing printed value with primary key value
4. What is wrong with this model definition?
class Customer(models.Model):
id = models.IntegerField(primary_key=True)
id = models.CharField(max_length=10, primary_key=True)
medium
A. You must use AutoField for primary keys, not IntegerField or CharField.
B. Primary keys cannot be named 'id'.
C. You cannot have two fields with primary_key=True in the same model.
D. The model is missing a Meta class to define primary key.
Solution
Step 1: Check primary key uniqueness in model
A Django model can have only one primary key field.
Here, two fields named 'id' are declared with primary_key=True, which is invalid.
Final Answer:
You cannot have two fields with primary_key=True in the same model. -> Option C
Quick Check:
Only one primary key allowed per model [OK]
Hint: Only one field can have primary_key=True in a model [OK]
Common Mistakes:
Thinking multiple primary keys are allowed
Believing primary key must be AutoField
Assuming primary key name restrictions
5. You want to create a Django model where the email field uniquely identifies each user and acts as the primary key. Which is the best way to define this model?
hard
A.
class User(models.Model):
email = models.EmailField(primary_key=True)
name = models.CharField(max_length=100)
B.
class User(models.Model):
email = models.EmailField(unique=True)
name = models.CharField(max_length=100)
C.
class User(models.Model):
id = models.AutoField(primary_key=True)
email = models.EmailField(unique=True)
name = models.CharField(max_length=100)
D.
class User(models.Model):
email = models.EmailField()
name = models.CharField(max_length=100)
class Meta:
primary_key = 'email'
Solution
Step 1: Understand primary key vs unique
Primary key uniquely identifies records and is used as the main identifier.
Step 2: Check options for setting email as primary key
class User(models.Model):
email = models.EmailField(primary_key=True)
name = models.CharField(max_length=100)
sets email as primary key directly, which is correct.
class User(models.Model):
email = models.EmailField(unique=True)
name = models.CharField(max_length=100)
only makes it unique but not primary key.
class User(models.Model):
id = models.AutoField(primary_key=True)
email = models.EmailField(unique=True)
name = models.CharField(max_length=100)
keeps default id as primary key.
class User(models.Model):
email = models.EmailField()
name = models.CharField(max_length=100)
class Meta:
primary_key = 'email'
uses invalid Meta syntax.
Final Answer:
Define email with primary_key=True in the model field. -> Option A
Quick Check:
Set primary_key=True on email field to make it primary key [OK]
Hint: Use primary_key=True on email field to make it primary key [OK]
Common Mistakes:
Using unique=True instead of primary_key=True
Keeping default id field as primary key
Trying to set primary key in Meta class
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.