Menu
CoddyTech

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 aufgelistet 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 Book für den Rückweg einen Manager hinzu, der nach dem Modell plus _set benannt ist: 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 existiert nicht mehr.

Vorlagen folgen Beziehungen mit Punkten und rufen Methoden ohne Klammern auf: {% for other in loan.book.loans.all %} geht vorwärts und dann zurück zu jeder Ausleihe desselben Buchs. Ein falsch geschriebener Name zeigt nichts an, ohne einen Fehler auszulösen. Wenn also eine Liste leer ausgegeben wird, überprüfe zuerst die Namen.

challenge icon

Aufgabe

Einfach
  • Gib Book.author den Rückwärtsnamen books.
  • Füge in book_detail.html oberhalb des Zurück-Links eine <h2>-Überschrift wie More by Frank Herbert und eine <ul class="more"> hinzu, die alle Bücher dieses Autors auflistet, jeweils als Link zu ihrer Seite.

Klicke auf Run und öffne die Seite eines Buches.

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 %}
quiz iconTeste dich selbst

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