Menu
CoddyTech

صفحة المؤلفين

جزء من قسم النماذج ولوحة الإدارة في رحلة Django على Coddy. الدرس 22 من 23.

تحتوي رفوف كتبك على صفحة لكل كتاب، لكن لا توجد صفحة للمؤلفين. ينشئ هذا المشروع صفحةً انطلاقًا مما تعرفه: عرضًا يستعلم من قاعدة البيانات، وعنوان URL، وقالبًا يتبع العلاقات، ومجموعة استعلامات لا تنفّذ استعلامًا لكل صف.

يُدرَج كل مؤلف مع كتبه: حلقة تمرّ على المؤلفين، وداخلها حلقة تمرّ على كتب كل مؤلف. من دون مساعدة، تنفّذ الحلقة الداخلية استعلامًا واحدًا لكل مؤلف. لا يمكن لـ select_related() أن يساعد، لأن الانتقال من المؤلف إلى كتبه يكون في الاتجاه العكسي. أما شريكه، prefetch_related()، فيجلب الصفوف المرتبطة بكل عنصر في القائمة باستعلام إضافي واحد.

تحدّد المهمة ما يجب أن تفعله الصفحة؛ أما الشيفرة فهي من إنجازك.

challenge icon

التحدي

متوسط

أنشئ صفحة للمؤلفين على /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