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 va in avanti e Django aggiunge a Book un manager per il percorso inverso, chiamato con il nome del modello seguito da _set: book.loan_set.all(). related_name permette di dargli 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 su Loan.objects e loan_set non esiste più.

I template seguono le relazioni con i punti e chiamano i metodi senza parentesi: {% for other in loan.book.loans.all %} va in avanti, poi torna indietro a tutti i prestiti dello stesso libro. Un nome scritto male non mostra nulla e non dà errori, quindi, quando una lista risulta vuota, controlla prima i nomi.

challenge icon

Sfida

Facile
  • Assegna a Book.author il nome inverso books.
  • 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 apri la pagina di un libro.

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