Select Related

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])>
]>

Last updated