# Prasath's Django application has these models:
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
class Review(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE)
rating = models.IntegerField()
# Prasath needs to fetch all reviews with their related books and authors
reviews = Review.objects.select_related('book__author').all()Django QuerySet Optimization with select_related vs prefetch_related
The query is optimal because select_related() handles both forward ForeignKey relationships and will fetch Author data in a single query with JOINs.
The query should use prefetch_related('book__author') instead to avoid database table JOINs and use separate queries.
The query should combine both: select_related('book').prefetch_related('book__author') for better performance.
The query is inefficient because select_related() creates unnecessary JOINs and should use only filter() instead.
Show answer & explanationAnswer
Correct answer
The query is optimal because select_related() handles both forward ForeignKey relationships and will fetch Author data in a single query with JOINs.
Explanation
select_related() performs SQL JOINs for ForeignKey relationships (one-to-one and one-to-many from the one side), while prefetch_related() uses separate queries for reverse ForeignKey and ManyToMany. For the given code, select_related('book__author') correctly follows the ForeignKey chain.
All 30 Django Models and Database Design questions
- 1.What is the primary purpose of Django Models?
- 2.Which field type should be used to store an email address in a Django Model?
- 3.What does the Meta class inside a Django Model do?
- 4.Which relationship type is used when one model can have many instances of another model?
- 5.What is the purpose of the `__str__` method in a Django Model?
- 6.Which field attribute makes a field mandatory in Django Models?
- 7.What does the `on_delete` parameter do in a ForeignKey relationship?
- 8.Which of the following is a valid Django field type for storing boolean values?
- 9.What is the default behavior when you don't specify `null=True` for a field in Django?
- 10.Which method is used to retrieve a single object from the database in Django?
- 11.Understanding Django Model Meta Options
- 12.Scenario:
- 13.Django QuerySet Filter vs Get Method
- 14.Coding:
- 15.Scenario:
- 16.Understanding Django Model Inheritance
- 17.Coding:
- 18.Scenario:
- 19.Django Model Manager and QuerySet Methods
- 20.Coding:
- 21.Django Model Inheritance Strategy Selection
- 22.Django QuerySet Optimization with select_related vs prefetch_related
- 23.Django Model Field Choices and Validation
- 24.Django Model Relationships:
- 25.Django Model Signals and Database Consistency
- 26.Django Model Meta Options:
- 27.Django Model Managers and Custom QuerySets
- 28.Django Model Field:
- 29.Django Model Validation:
- 30.Django Model Aggregation and Annotation
