Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Elenca gli altri libri dell'autore nella pagina di ciascun libro.

  1. In books/models.py, assegna a Book.author il nome correlato books, così author.books.all() restituisce tutti i libri di quell'autore.
  2. In book_detail.html, sopra il link Indietro, aggiungi un <h2> come More by Frank Herbert e 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 %}
quiz iconMettiti alla prova

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