Menu
CoddyTech

Como um livro é exibido

Parte da seção Models e o Admin do Journey de Django da Coddy. Lição 5 de 23.

Pressione “Executar” e digite Book.objects.all() na aba Shell: todos os livros aparecem como <Book: Book object (1)>, e não dá para diferenciá-los. Book.objects.all() solicita todos os livros; o próximo capítulo explica isso. Python transforma um objeto em texto com seu método __str__, e o método que todo modelo recebe mostra apenas o id. Um modelo pode definir o próprio método. O Movie de um site de filmes poderia exibir o título e o ano:

class Movie(models.Model):
    ...

    def __str__(self):
        return f"{self.title} ({self.released.year})"

O shell então exibe <Movie: Alien (1979)>, assim como o painel de administração e qualquer template que exiba {{ movie }}. __str__ precisa retornar o texto. Um método que o exibe retorna None, e então str() falha com um TypeError.

challenge icon

Desafio

Fácil

Em books/models.py, faça com que um livro seja exibido como seu título, by e seu autor: Dune by Frank Herbert.

Pressione Executar e digite Book.objects.all() na aba Shell: agora cada livro é exibido como <Book: Dune by Frank Herbert>.

Experimente você mesmo

from django.db import models


class Book(models.Model):
    class Genre(models.TextChoices):
        FICTION = "fiction", "Fiction"
        SCIFI = "scifi", "Science fiction"
        MYSTERY = "mystery", "Mystery"
        HISTORY = "history", "History"

    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    year = models.IntegerField()
    price = models.DecimalField(max_digits=6, decimal_places=2)
    is_read = models.BooleanField(default=False)
    finished = models.DateField(null=True, blank=True)
    summary = models.TextField(blank=True)
    genre = models.CharField(max_length=20, choices=Genre, default=Genre.FICTION)

Todas as lições de Models e o Admin

Pratique por conta própria: Playground de Django