Menu
CoddyTech

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.

challenge icon

Wyzwanie

Łatwy

Wyświetl pozostałe książki autora na stronie każdej książki.

  1. W pliku books/models.py ustaw nazwę powiązania dla Book.author na books, aby author.books.all() zwracało wszystkie książki danego autora.
  2. W pliku book_detail.html, nad linkiem powrotu, dodaj nagłówek <h2>, taki jak More 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 %}
quiz iconSprawdź się

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