Menu
CoddyTech

Noms associés

Fait partie de la section Modèles et interface d’administration du Journey Django de Coddy. Leçon 17 sur 23.

La page d’un livre pourrait présenter les autres livres de son auteur. Cela signifie qu’on peut remonter de l’auteur à ses livres : une ForeignKey fonctionne dans les deux sens. Avec un Loan pointant vers un livre, loan.book permet d’aller dans le sens direct, et Django ajoute à Book un gestionnaire pour le sens inverse, nommé d’après le modèle suivi de _set : book.loan_set.all(). related_name permet de lui donner un meilleur nom :

book = models.ForeignKey(Book, on_delete=models.PROTECT, related_name="loans")

Maintenant, book.loans.all() renvoie les prêts de ce livre, book.loans.count() fonctionne comme avec Loan.objects, et loan_set n’existe plus.

Dans les modèles, on suit les relations avec des points et on appelle les méthodes sans parenthèses : sur la page d’un livre, {% for loan in book.loans.all %} liste les prêts de ce livre. Un nom mal orthographié n’affiche rien, sans erreur ; si une liste est vide, vérifie d’abord les noms.

challenge icon

Défi

Facile

Affiche les autres livres de l’auteur sur la page de chaque livre.

  1. Dans books/models.py, donne à Book.author le nom associé books, afin que author.books.all() renvoie tous les livres de cet auteur.
  2. Dans book_detail.html, au-dessus du lien de retour, ajoute un <h2> comme More by Frank Herbert et un <ul class="more"> répertoriant tous les livres de cet auteur, chacun étant un lien vers sa page.

Appuie sur Run et clique sur Dune : sous More by Frank Herbert, tu vois Children of Dune et Dune.

Essayez vous-même

{% 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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Modèles et interface d’administration

Entraînez-vous par vous-même : Playground Django