Tên liên quan
Thuộc phần Model và trang quản trị trong hành trình Django của Coddy. Bài học 17 trên 23.
Trang sách có thể liệt kê những cuốn sách khác của tác giả. Điều đó nghĩa là đi từ tác giả quay lại các cuốn sách của họ: ForeignKey hoạt động theo cả hai chiều. Với một Loan trỏ đến một cuốn sách, loan.book đi theo chiều thuận, còn Django thêm một trình quản lý vào Book để truy cập theo chiều ngược lại, với tên ghép từ tên model và _set: book.loan_set.all(). related_name giúp đặt tên dễ hiểu hơn:
book = models.ForeignKey(Book, on_delete=models.PROTECT, related_name="loans")Giờ đây, book.loans.all() trả về các khoản mượn cuốn sách đó, book.loans.count() hoạt động giống như với Loan.objects, còn loan_set không còn tồn tại.
Trong template, bạn truy cập các quan hệ bằng dấu chấm và gọi phương thức không cần dấu ngoặc đơn: Trên trang của một cuốn sách, {% for loan in book.loans.all %} liệt kê các khoản mượn cuốn sách đó. Nếu viết sai tên, template sẽ không hiển thị gì mà không báo lỗi, vì vậy khi danh sách trống, trước tiên hãy kiểm tra tên.
Thử thách
DễLiệt kê các sách khác của tác giả trên trang của mỗi cuốn sách.
- Trong
books/models.py, đặt tên liên kết ngược củaBook.authorlàbooks, đểauthor.books.all()trả về mọi cuốn sách của tác giả đó. - Trong
book_detail.html, thêm một<h2>nhưMore by Frank Herbertvà một<ul class="more">liệt kê mọi cuốn sách của tác giả đó, mỗi cuốn là một liên kết đến trang của sách, phía trên liên kết Quay lại.
Nhấn Chạy rồi nhấp vào Dune: bên dưới More by Frank Herbert, bạn sẽ thấy Children of Dune và Dune.
Tự làm thử
{% 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 %}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Model và trang quản trị
Tự luyện tập: Playground Django