Menu
CoddyTech

Nama Terkait

Termasuk bagian Model dan Admin dalam perjalanan Django di Coddy. Pelajaran 17 dari 23.

Halaman sebuah buku dapat mencantumkan buku-buku lain karya penulisnya. Artinya, kita bergerak dari penulis kembali ke buku-bukunya: ForeignKey bekerja dalam dua arah. Dengan Loan yang mengarah ke sebuah buku, loan.book bergerak ke depan, dan Django menambahkan manager ke Book untuk arah sebaliknya, dengan nama yang dibentuk dari nama model ditambah _set: book.loan_set.all(). related_name memberikan nama yang lebih baik:

book = models.ForeignKey(Book, on_delete=models.PROTECT, related_name="loans")

Sekarang book.loans.all() mengembalikan pinjaman untuk buku tersebut, book.loans.count() berfungsi seperti pada Loan.objects, dan loan_set tidak ada lagi.

Template mengikuti relasi dengan titik dan memanggil method tanpa tanda kurung: {% for other in loan.book.loans.all %} bergerak ke depan, lalu kembali ke setiap pinjaman untuk buku yang sama. Nama yang salah eja tidak menampilkan apa pun dan tidak memunculkan error, jadi saat daftar kosong, periksa namanya terlebih dahulu.

challenge icon

Tantangan

Mudah
  • Beri Book.author nama relasi balik books.
  • Di book_detail.html, di atas tautan Kembali, tambahkan <h2> seperti More by Frank Herbert dan <ul class="more"> yang mencantumkan semua buku karya penulis tersebut, masing-masing ditautkan ke halamannya.

Tekan Jalankan dan buka halaman sebuah buku.

Coba sendiri

{% 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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Model dan Admin

Latihan sendiri: Playground Django