Menu
CoddyTech

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.

challenge icon

Sfida

Medio

Crea 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.html contiene un link alla pagina con il testo Authors.

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