A primary key is a unique identifier for each record in a database table. In Django, it uniquely identifies each model instance.
Click to reveal answer
beginner
What happens if you don't define a primary key in a Django model?
Django automatically adds an id field as an auto-incrementing primary key.
Click to reveal answer
intermediate
Can you use a field other than id as a primary key in Django?
Yes, you can set any field as the primary key by adding primary_key=True to that field.
Click to reveal answer
intermediate
What is the behavior of a primary key field with primary_key=True in Django?
It becomes unique, non-nullable, and automatically used as the identifier for model instances.
Click to reveal answer
beginner
Why should a primary key be unique and non-null in Django models?
Because it identifies each record uniquely and must always have a value to avoid confusion in data retrieval.
Click to reveal answer
What does Django do if no primary key is defined in a model?
AThrows an error
BAdds an auto-incrementing <code>id</code> field as primary key
CUses the first field as primary key
DCreates a composite key automatically
✗ Incorrect
Django automatically adds an id field as the primary key if none is defined.
Which of these is true about a primary key field in Django?
AIt must be unique
BIt can be null
CIt can have duplicate values
DIt is optional
✗ Incorrect
Primary keys must be unique and non-null to identify records uniquely.
How do you set a custom field as a primary key in Django?
AAdd <code>unique=True</code> to the field
BSet <code>auto_increment=True</code>
CAdd <code>primary_key=True</code> to the field
DRename the field to <code>id</code>
✗ Incorrect
Setting primary_key=True on a field makes it the primary key.
What type of field does Django use by default for the primary key?
ABooleanField
BCharField
CForeignKey
DAutoField
✗ Incorrect
Django uses an AutoField, an integer that auto-increments, as the default primary key.
Why is it important that a primary key is non-null?
ATo ensure every record can be uniquely identified
BTo speed up queries
CTo allow multiple records with the same key
DTo allow null values in other fields
✗ Incorrect
A non-null primary key ensures each record is uniquely identifiable.
Explain what a primary key is in Django and how Django handles it if you don't define one.
Think about what Django adds automatically to every model.
You got /4 concepts.
Describe how to set a custom primary key in a Django model and what changes this causes.
Focus on the field attribute that changes primary key behavior.
You got /3 concepts.
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.