Performance: ForeignKey for one-to-many
This affects database query performance and page load speed when rendering related data in templates.
Jump into concepts and practice - no test required
parents = Parent.objects.prefetch_related('child_set').all() for parent in parents: children = parent.child_set.all() # render parent and children
parents = Parent.objects.all() for parent in parents: children = Child.objects.filter(parent=parent) # render parent and children
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| N+1 queries with ForeignKey | Minimal DOM nodes | 1 reflow per render | Low paint cost | [X] Bad |
| prefetch_related with ForeignKey | Minimal DOM nodes | 1 reflow per render | Low paint cost | [OK] Good |
ForeignKey field to represent a one-to-many relationship?Book that links to a model named Author?on_delete argument to specify delete behavior.on_delete=models.CASCADE. Options A, B, and D have syntax errors or missing required arguments.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.objects.filter(author__name='Alice').count() return if there are 3 books by Alice and 2 by Bob?class Comment(models.Model):
post = models.ForeignKey(Post)
text = models.TextField()on_delete is required for ForeignKey fields.on_delete, causing an error.class Category(models.Model):
name = models.CharField(max_length=50)
class Product(models.Model):
name = models.CharField(max_length=100)
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)