Powiązane nazwy
Część sekcji Modele i panel administracyjny ścieżki Django w Coddy. Lekcja 17 z 23.
Na stronie książki można wyświetlić inne książki autora. Oznacza to przejście od autora z powrotem do jego książek: ForeignKey działa w obu kierunkach. Gdy Loan wskazuje książkę, loan.book prowadzi w przód, a Django dodaje do Book menedżera dla kierunku odwrotnego, którego nazwa jest tworzona z nazwy modelu i _set: book.loan_set.all(). related_name pozwala nadać mu lepszą nazwę:
book = models.ForeignKey(Book, on_delete=models.PROTECT, related_name="loans")Teraz book.loans.all() zwraca wypożyczenia tej książki, book.loans.count() działa tak samo jak w przypadku Loan.objects, a loan_set już nie istnieje.
W szablonach relacje zapisuje się za pomocą kropek, a metody wywołuje bez nawiasów: na stronie książki {% for loan in book.loans.all %} wyświetla wypożyczenia tej książki. Błędnie zapisane nazwy nie powodują błędu — po prostu nic się nie wyświetla. Jeśli więc lista jest pusta, najpierw sprawdź nazwy.
Wyzwanie
ŁatwyWyświetl pozostałe książki autora na stronie każdej książki.
- W pliku
books/models.pyustaw nazwę powiązania dlaBook.authornabooks, abyauthor.books.all()zwracało wszystkie książki danego autora. - W pliku
book_detail.html, nad linkiem powrotu, dodaj nagłówek<h2>, taki jakMore by Frank Herbert, oraz element<ul class="more">zawierający wszystkie książki tego autora, każdą jako link do jej strony.
Naciśnij „Uruchom” i kliknij Dune: pod nagłówkiem More by Frank Herbert zobaczysz Children of Dune i Dune.
Spróbuj swoich sił
{% 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 %}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Modele i panel administracyjny
Poćwicz samodzielnie: Edytor online Django