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 répertorier 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 qui pointe vers un livre, loan.book permet d’aller dans un sens, et Django ajoute à Book un gestionnaire pour revenir en arrière, dont le nom est formé du nom du modèle suivi de _set : book.loan_set.all(). related_name permet de lui donner un nom plus parlant :
book = models.ForeignKey(Book, on_delete=models.PROTECT, related_name="loans")Désormais, 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 : {% for other in loan.book.loans.all %} permet d’avancer, puis de revenir à tous les prêts du même livre. Une faute de frappe dans un nom ne renvoie rien et ne déclenche aucune erreur ; si une liste est vide, vérifie d’abord les noms.
Défi
Facile- Attribuez à
Book.authorle nom de relation inversebooks. - Dans
book_detail.html, au-dessus du lien de retour, ajoutez un<h2>commeMore by Frank Herbertet un<ul class="more">répertoriant tous les livres de cet auteur, chacun étant un lien vers sa page.
Appuyez sur Run et ouvrez la page d’un livre.
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 %}
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
3Des pages issues de la base de données
Une liste issue de la base de donnéesUne page pour chaque livreEntraînez-vous par vous-même : Playground Django