صفحة المؤلفين
جزء من قسم النماذج ولوحة الإدارة في رحلة Django على Coddy. الدرس 22 من 23.
تحتوي رفوف كتبك على صفحة لكل كتاب، لكن لا توجد صفحة للمؤلفين. ينشئ هذا المشروع صفحةً انطلاقًا مما تعرفه: عرضًا يستعلم من قاعدة البيانات، وعنوان URL، وقالبًا يتبع العلاقات، ومجموعة استعلامات لا تنفّذ استعلامًا لكل صف.
يُدرَج كل مؤلف مع كتبه: حلقة تمرّ على المؤلفين، وداخلها حلقة تمرّ على كتب كل مؤلف. من دون مساعدة، تنفّذ الحلقة الداخلية استعلامًا واحدًا لكل مؤلف. لا يمكن لـ select_related() أن يساعد، لأن الانتقال من المؤلف إلى كتبه يكون في الاتجاه العكسي. أما شريكه، prefetch_related()، فيجلب الصفوف المرتبطة بكل عنصر في القائمة باستعلام إضافي واحد.
تحدّد المهمة ما يجب أن تفعله الصفحة؛ أما الشيفرة فهي من إنجازك.
التحدي
متوسطأنشئ صفحة للمؤلفين على /authors/، باسم عنوان URL authors:
- يُخصَّص لكل مؤلف عنصر
<section class="author">يتضمن اسمه في عنصر<h2>وروابط إلى كل كتبه. - تنفّذ الصفحة العدد نفسه من الاستعلامات القليلة مهما كان عدد المؤلفين.
- يرتبط رأس الصفحة في
books/base.htmlبها باسمAuthors.
اضغط على «تشغيل»، ثم انقر على «المؤلفون».
جرّب بنفسك
from django.shortcuts import get_object_or_404, render
from .models import Book
def home(request):
books = Book.objects.select_related("author")
return render(request, "books/home.html", {"books": books})
def book_detail(request, pk):
book = get_object_or_404(Book, pk=pk)
return render(request, "books/book_detail.html", {"book": book})
def search(request):
q = request.GET.get("q", "")
books = Book.objects.filter(title__icontains=q).select_related("author")
return render(request, "books/search.html", {"q": q, "books": books})
جميع دروس النماذج ولوحة الإدارة
تدرّب بنفسك: Playground لـ Django