0
0
Djangoframework~20 mins

On_delete options (CASCADE, PROTECT, SET_NULL) in Django - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
On_delete Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What happens when a parent object is deleted with CASCADE?
Consider a Django model where a child model has a ForeignKey to a parent model with on_delete=models.CASCADE. What is the behavior when the parent object is deleted?
Django
class Parent(models.Model):
    name = models.CharField(max_length=100)

class Child(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
AAll child objects linked to the parent are deleted automatically.
BThe deletion of the parent is blocked and raises an error.
CThe parent is deleted but child objects keep their foreign key pointing to a non-existent parent.
DThe foreign key in child objects is set to NULL, but the child objects remain.
Attempts:
2 left
💡 Hint
Think about what CASCADE means in everyday life, like a waterfall effect.
component_behavior
intermediate
2:00remaining
What error occurs with PROTECT on deleting a parent?
If a ForeignKey uses on_delete=models.PROTECT, what happens when you try to delete the parent object that has child objects linked to it?
Django
class Parent(models.Model):
    name = models.CharField(max_length=100)

class Child(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.PROTECT)
    name = models.CharField(max_length=100)
AThe parent is deleted and child objects are also deleted.
BThe parent is deleted and child foreign keys are set to NULL.
CA ProtectedError is raised and the parent deletion is blocked.
DThe parent is deleted but child foreign keys point to a missing parent.
Attempts:
2 left
💡 Hint
PROTECT means to stop something from happening.
component_behavior
advanced
2:00remaining
What is the effect of SET_NULL on deleting a parent object?
Given a ForeignKey with on_delete=models.SET_NULL and null=True, what happens to child objects when the parent is deleted?
Django
class Parent(models.Model):
    name = models.CharField(max_length=100)

class Child(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.SET_NULL, null=True)
    name = models.CharField(max_length=100)
AChild objects are deleted along with the parent.
BChild objects keep their foreign key pointing to the deleted parent.
CDeletion of the parent is blocked with an error.
DChild objects remain and their foreign key is set to NULL.
Attempts:
2 left
💡 Hint
Think about removing a link but keeping the child safe.
📝 Syntax
advanced
2:00remaining
Which ForeignKey declaration is correct for SET_NULL?
You want to use on_delete=models.SET_NULL in a ForeignKey. Which option is syntactically correct and will work without errors?
Aparent = models.ForeignKey(Parent, on_delete=models.SET_NULL, blank=True)
Bparent = models.ForeignKey(Parent, on_delete=models.SET_NULL, null=True)
Cparent = models.ForeignKey(Parent, on_delete=models.SET_NULL)
Dparent = models.ForeignKey(Parent, on_delete=models.SET_NULL, default=None)
Attempts:
2 left
💡 Hint
SET_NULL requires the field to accept NULL values.
state_output
expert
3:00remaining
What is the count of Child objects after deleting a Parent with mixed on_delete behaviors?
Given these models and data, what is the number of Child objects remaining after deleting the Parent with id=1?
Django
class Parent(models.Model):
    name = models.CharField(max_length=100)

class ChildCascade(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.CASCADE)

class ChildProtect(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.PROTECT)

class ChildSetNull(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.SET_NULL, null=True)

# Setup:
# Parent object with id=1 exists
# ChildCascade objects linked to Parent 1: 3
# ChildProtect objects linked to Parent 1: 2
# ChildSetNull objects linked to Parent 1: 4

# Action:
# Attempt to delete Parent with id=1
ADeletion fails with ProtectedError; all 9 child objects remain
B4 child objects remain: only SetNull children with foreign keys set to NULL
C5 child objects remain: 2 Protect and 3 SetNull (SetNull children foreign keys set to NULL)
D9 child objects remain: 3 Cascade, 2 Protect, 4 SetNull
Attempts:
2 left
💡 Hint
PROTECT blocks deletion if any child exists.