작가 페이지
Coddy Django 여정의 모델과 관리자 섹션에 포함된 레슨. 23개 중 22번째.
책장에는 책마다 페이지가 있지만 저자를 위한 페이지는 없습니다. 이 프로젝트에서는 알고 있는 내용을 바탕으로 페이지를 만듭니다. 데이터베이스를 조회하는 뷰, URL, 관계를 따라가는 템플릿, 그리고 행마다 쿼리를 실행하지 않는 QuerySet을 사용합니다.
각 저자와 해당 저자의 책을 함께 나열합니다. 저자를 반복하는 루프 안에 각 저자의 책을 반복하는 루프가 있습니다. 별도의 조치가 없으면 안쪽 루프는 저자마다 쿼리를 하나씩 실행합니다. 저자에서 책으로 가는 것은 역방향이므로 select_related()로는 해결할 수 없습니다. 이에 대응하는 prefetch_related()는 목록에 있는 모든 객체의 관련 행을 쿼리 하나를 더 실행해 가져옵니다.
페이지가 해야 할 일은 과제에 나와 있습니다. 코드는 여러분이 작성합니다.
챌린지
중급/authors/에 Authors 페이지를 만들고, URL 이름을 authors로 지정합니다.
- 각 저자마다 이름이
<h2>에 표시되고 저자의 각 책으로 연결되는 링크가 포함된<section class="author">를 만듭니다. - 저자가 몇 명이든 페이지에서 실행되는 쿼리 수는 동일하게 유지됩니다.
books/base.html의 헤더에서Authors로 연결합니다.
Run을 누르고 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})
모델과 관리자의 모든 레슨
직접 연습해 보세요: Django 플레이그라운드