انتخاب بهینه با select_related و prefetch_related


🔹 5. انتخاب بهینه با select_related و prefetch_related

وقتی داده‌های مرتبط را بازیابی می‌کنیم، جنگو معمولاً چندین Query جداگانه اجرا می‌کند (مشکل N+1).
برای بهینه‌سازی می‌توان از این دو متد استفاده کرد:

📌 select_related: برای روابط ForeignKey و OneToOne

 
books = Book.objects.select_related("author").all() for book in books: print(book.title, book.author.name)

➡️ فقط یک Query اجرا می‌شود.

📌 prefetch_related: برای روابط ManyToMany و معکوس ForeignKey

 
courses = Course.objects.prefetch_related("students").all() for course in courses: print(course.title, [s.name for s in course.students.all()])

➡️ تعداد Queryها به حداقل می‌رسد.