La pagina degli autori
Fa parte della sezione Modelli e pannello di amministrazione del percorso Django di Coddy. Lezione 22 di 23.
La tua libreria ha una pagina per ogni libro, ma nessuna per gli autori. Questo progetto ne crea una partendo da ciò che sai: una vista che esegue una query sul database, un URL, un template che segue le relazioni e un QuerySet che non esegue una query per ogni riga.
Ogni autore è elencato insieme ai suoi libri: un ciclo sugli autori e, al suo interno, un ciclo sui libri di ogni autore. Senza aiuto, il ciclo interno esegue una query per autore. select_related() non può aiutare, perché dagli autori ai loro libri si va nella direzione opposta. Il suo corrispettivo, prefetch_related(), recupera con una query aggiuntiva le righe correlate a ogni oggetto dell’elenco.
Il compito indica cosa deve fare la pagina; il codice sta a te.
Sfida
MedioCrea una pagina Autori all'indirizzo /authors/, con nome URL authors:
- Per ogni autore, crea una
<section class="author">con il suo nome in un<h2>e i link a ciascuno dei suoi libri. - La pagina esegue sempre le stesse poche query, indipendentemente dal numero di autori.
- L'intestazione in
books/base.htmlcontiene un link alla pagina con il testoAuthors.
Premi Run e fai clic su Authors.
Provalo tu
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})
Tutte le lezioni di Modelli e pannello di amministrazione
Esercitati da solo: Playground Django