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)
মনে করি আমার ডেটাবেজ এ নিচের মত ডেটা আছে
Author Data:
--------------
ID: 1
Name: John Smith
ID: 2
Name: Jane Doe
Book Data:
--------------
ID: 1
Title: "Book 1"
Author: 1 (John Smith)
ID: 2
Title: "Book 2"
Author: 1 (John Smith)
ID: 3
Title: "Book 3"
Author: 2 (Jane Doe)
এবার একটি নরমাল কোয়েরি চালিয়ে book মডেল থেকে author এর নাম বের করি।
books = Book.objects.all()
for book in books:
author = book.author # Retrieves the author for each book (causing an additional query)
print(f"Book: {book.title}, Author: {author.name}")
উপরের কোয়েরি টি চালানোর ফলে প্রথমে সব বুক অবজেক্ট নিয়ে আসবে যার মধ্যে author নাম থাকবে না পরে আরেকটি কোয়েরি চালিয়ে (ফর লুপে চালানো হয়েছে ) ডেটা আনতে হয়েছে তার পর ডেটা এসেছে।
<QuerySet [
<Book: Book 1>,
<Book: Book 2>,
<Book: Book 3>
]>
এবার releated() কোয়েরি চালাই :
books = Book.objects.select_related('author')
for book in books:
author = book.author # No additional query is made because of select_related()
print(f"Book: {book.title}, Author: {author.name}")
উপরের কোয়েরি টি চালানোর ফলে বুক অবজেক্ট নিয়ে আসবে যার মধ্যে author নাম থাকবে যার কারণে ফর লুপের মধ্যে নতুন কোন কোয়েরি লাগবে না সরাসরি ডেটা প্রদান করবে।
<QuerySet [
<Book: A Tale of Two Cities (Author: John Smith)>,
<Book: To Kill a Mockingbird (Author: John Smith)>,
<Book: The Great Gatsby (Author: [Author not loaded])>
]>