Zugehörige Namen
Teil des Abschnitts Modelle und Admin-Bereich der Django-Journey von Coddy. Lektion 17 von 23.
Auf der Seite eines Buchs könnten die anderen Bücher des Autors aufgeführt sein. Das bedeutet, vom Autor zurück zu seinen Büchern zu gehen: Ein ForeignKey funktioniert in beide Richtungen. Wenn ein Loan auf ein Buch verweist, führt loan.book vorwärts, und Django fügt für die Rückrichtung einen Manager zu Book hinzu, dessen Name aus dem Modellnamen und _set besteht: book.loan_set.all(). related_name gibt ihm einen besseren Namen:
book = models.ForeignKey(Book, on_delete=models.PROTECT, related_name="loans")Jetzt gibt book.loans.all() die Ausleihen dieses Buchs zurück, book.loans.count() funktioniert wie bei Loan.objects, und loan_set gibt es nicht mehr.
In Vorlagen folgt man Beziehungen mit Punkten und ruft Methoden ohne Klammern auf: Auf der Seite eines Buchs listet {% for loan in book.loans.all %} die Ausleihen dieses Buchs auf. Ein falsch geschriebener Name zeigt nichts an, ohne Fehlermeldung. Wenn eine Liste also leer bleibt, überprüfe zuerst die Namen.
Aufgabe
EinfachListe die anderen Bücher des Autors auf der Seite jedes Buchs auf.
- Gib in
books/models.pyBook.authorden zugehörigen Namenbooks, sodassauthor.books.all()alle Bücher dieses Autors zurückgibt. - Füge in
book_detail.htmloberhalb des Zurück-Links eine Überschrift wieMore by Frank Herbertund eine<ul class="more">hinzu, in der jedes Buch dieses Autors aufgeführt ist und auf seine Seite verlinkt.
Klicke auf „Ausführen“ und dann auf Dune: Unter More by Frank Herbert siehst du Children of Dune und Dune.
Probier es selbst
{% 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 %}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Modelle und Admin-Bereich
Übe selbstständig: Django-Playground