Nomi correlati
Fa parte della sezione Modelli e pannello di amministrazione del percorso Django di Coddy. Lezione 17 di 23.
La pagina di un libro potrebbe elencare gli altri libri dell'autore. Questo significa passare dall'autore ai suoi libri: una ForeignKey funziona in entrambe le direzioni. Con un Loan che punta a un libro, loan.book procede in avanti e Django aggiunge a Book un manager per la direzione inversa, chiamato con il nome del modello seguito da _set: book.loan_set.all(). related_name gli assegna un nome migliore:
book = models.ForeignKey(Book, on_delete=models.PROTECT, related_name="loans")Ora book.loans.all() restituisce i prestiti di quel libro, book.loans.count() funziona come con Loan.objects e loan_set non esiste più.
I template seguono le relazioni usando i punti e chiamano i metodi senza parentesi: nella pagina di un libro, {% for loan in book.loans.all %} elenca i prestiti di quel libro. Un nome scritto in modo errato non mostra nulla, senza generare errori, quindi, quando un elenco risulta vuoto, controlla prima i nomi.
Sfida
FacileElenca gli altri libri dell'autore nella pagina di ciascun libro.
- In
books/models.py, assegna aBook.authoril nome correlatobooks, cosìauthor.books.all()restituisce tutti i libri di quell'autore. - In
book_detail.html, sopra il link Indietro, aggiungi un<h2>comeMore by Frank Herberte un<ul class="more">che elenchi tutti i libri di quell'autore, ciascuno collegato alla propria pagina.
Premi Esegui e fai clic su Dune: sotto More by Frank Herbert vedrai Children of Dune e Dune.
Provalo tu
{% extends "books/base.html" %}
{% block title %}{{ book.title }}{% endblock %}
{% block content %}
<h1>{{ book.title }}</h1>
<p class="author">by {{ book.author }}</p>
<ul>
<li>Published in {{ book.year }}</li>
<li>Genre: {{ book.get_genre_display }}</li>
<li>Price: {{ book.price }}</li>
</ul>
<p><a href="{% url 'books:home' %}">Back to the shelf</a></p>
{% endblock %}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Modelli e pannello di amministrazione
Esercitati da solo: Playground Django