Challenge - 5 Problems
ForeignKey Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate2:00remaining
What does this Django model relationship produce?
Given these Django models, what will be the output of
print(book.author.name) if book is an instance of Book linked to an Author named 'Alice'?Django
from django.db import models class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE) # Assume book is a Book instance linked to Author named 'Alice' print(book.author.name)
Attempts:
2 left
💡 Hint
Remember that ForeignKey creates a link to a single related object.
✗ Incorrect
The ForeignKey field 'author' in Book links to one Author instance. Accessing 'book.author.name' returns the name of that Author, which is 'Alice'.
❓ state_output
intermediate2:00remaining
How many books are related to this author?
Given these models and an
Author instance author with 3 related Book instances, what is the output of print(author.book_set.count())?Django
from django.db import models class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE) # Assume author is an Author instance with 3 books linked print(author.book_set.count())
Attempts:
2 left
💡 Hint
Django automatically creates a reverse relation named
modelname_set.✗ Incorrect
The reverse relation from Author to Book is accessible via 'book_set'. Counting it returns the number of related Book instances, which is 3.
📝 Syntax
advanced2:00remaining
Which option correctly defines a ForeignKey for one-to-many in Django?
Select the correct Django model field definition to create a one-to-many relationship from
Book to Author.Django
from django.db import models class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=100) # ForeignKey field here
Attempts:
2 left
💡 Hint
One-to-many uses ForeignKey, not OneToOneField or ManyToManyField.
✗ Incorrect
ForeignKey creates a many-to-one relationship, which is one-to-many from Author to Book. OneToOneField is one-to-one, ManyToManyField is many-to-many, and CharField is just text.
🔧 Debug
advanced2:00remaining
Why does this code raise an error?
Given these models, why does accessing
book.author_set.all() raise an error?Django
from django.db import models class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE) book = Book.objects.first() print(book.author_set.all())
Attempts:
2 left
💡 Hint
Reverse relations are accessed from the model on the 'one' side, not the 'many' side.
✗ Incorrect
The reverse relation 'author_set' is created on Author instances to access related Books, not on Book instances. 'book.author_set' does not exist.
🧠 Conceptual
expert3:00remaining
What happens when you delete an Author instance linked to Books with on_delete=models.CASCADE?
Consider these models with
author = models.ForeignKey(Author, on_delete=models.CASCADE). What is the effect on related Book instances when an Author is deleted?Django
from django.db import models class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE)
Attempts:
2 left
💡 Hint
on_delete=models.CASCADE means related objects are deleted too.
✗ Incorrect
CASCADE deletes all related objects automatically when the referenced object is deleted, so all Books linked to that Author are deleted.