Nomes relacionados
Parte da seção Models e o Admin do Journey de Django da Coddy. Lição 17 de 23.
A página de um livro poderia listar outros livros do autor. Isso significa ir do autor de volta aos livros dele: uma ForeignKey funciona nos dois sentidos. Com um Loan apontando para um livro, loan.book segue adiante, e o Django adiciona um gerenciador a Book para o caminho de volta, com um nome formado pelo nome do modelo mais _set: book.loan_set.all(). related_name dá a ele um nome melhor:
book = models.ForeignKey(Book, on_delete=models.PROTECT, related_name="loans")Agora, book.loans.all() retorna os empréstimos daquele livro, book.loans.count() funciona como em Loan.objects, e loan_set deixa de existir.
Os templates seguem as relações usando pontos e chamam métodos sem parênteses: {% for other in loan.book.loans.all %} segue adiante e depois volta a todos os empréstimos do mesmo livro. Um nome escrito incorretamente não mostra nada, sem gerar erro; portanto, quando uma lista aparece vazia, confira os nomes primeiro.
Desafio
Fácil- Dê a
Book.authoro nome reversobooks. - Em
book_detail.html, acima do link Voltar, adicione um<h2>comoMore by Frank Herberte um<ul class="more">listando todos os livros desse autor, cada um com um link para sua página.
Pressione Executar e abra a página de um livro.
Experimente você mesmo
{% 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 %}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Models e o Admin
Pratique por conta própria: Playground de Django