Menu
CoddyTech

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 os outros livros do autor. Isso significa ir do autor de volta aos livros dele: uma ForeignKey funciona nas duas direções. Com um Loan apontando para um livro, loan.book segue na direção direta, e o Django adiciona um gerenciador a Book para a direção inversa, 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 não existe mais.

Os templates seguem as relações com pontos e chamam métodos sem parênteses: na página de um livro, {% for loan in book.loans.all %} lista os empréstimos daquele livro. Um nome escrito incorretamente não mostra nada, sem gerar erro; portanto, quando uma lista aparece vazia, confira primeiro os nomes.

challenge icon

Desafio

Fácil

Liste os outros livros do autor na página de cada livro.

  1. Em books/models.py, atribua a Book.author o nome relacionado books, para que author.books.all() retorne todos os livros desse autor.
  2. Em book_detail.html, acima do link Voltar, adicione um <h2> como More by Frank Herbert e um <ul class="more"> listando todos os livros desse autor, cada um como um link para sua página.

Pressione Executar e clique em Dune: abaixo de More by Frank Herbert, você verá Children of Dune e Dune.

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 %}
quiz iconTeste seus conhecimentos

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