관련 이름
Coddy Django 여정의 모델과 관리자 섹션에 포함된 레슨. 23개 중 17번째.
책 페이지에는 저자의 다른 책을 나열할 수 있습니다. 즉, 저자에서 다시 책으로 이동할 수 있습니다. ForeignKey는 양방향으로 작동합니다. 책을 가리키는 Loan이 있으면 loan.book으로 정방향 이동이 가능하고, Django는 역방향 이동을 위해 모델 이름 뒤에 _set을 붙인 매니저를 Book에 추가합니다. 이름은 book.loan_set.all()입니다. related_name을 사용하면 더 나은 이름을 지정할 수 있습니다.
book = models.ForeignKey(Book, on_delete=models.PROTECT, related_name="loans")이제 book.loans.all()은 해당 책의 대출 항목을 반환하고, book.loans.count()는 Loan.objects에서처럼 작동하며, loan_set은 더 이상 존재하지 않습니다.
템플릿에서는 점으로 관계를 따라가고 괄호 없이 메서드를 호출합니다. {% for other in loan.book.loans.all %}은 정방향으로 이동한 다음 같은 책의 모든 대출 항목으로 다시 돌아갑니다. 이름의 철자가 틀리면 오류 없이 아무것도 표시되지 않으므로, 목록이 비어 있으면 먼저 이름을 확인하세요.
챌린지
쉬움Book.author에 역참조 이름books를 지정하세요.book_detail.html에서 뒤로 가기 링크 위에More by Frank Herbert와 같은<h2>를 추가하고, 해당 저자의 모든 책을 나열하는<ul class="more">를 추가하세요. 각 책은 해당 책의 페이지로 연결되는 링크여야 합니다.
실행을 누르고 책 페이지를 여세요.
직접 해보기
{% 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 %}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
모델과 관리자의 모든 레슨
직접 연습해 보세요: Django 플레이그라운드