Como um livro é exibido
Parte da seção Models e o Admin do Journey de Django da Coddy. Lição 5 de 23.
Pressione Run e digite Book.objects.all() na aba Shell: todos os livros aparecem como <Book: Book object (1)>, e você não consegue distingui-los. O Python transforma um objeto em texto com o 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})"Então, o shell exibe <Movie: Alien (1979)>, assim como o admin 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.
Desafio
Fácil- Faça um livro ser exibido como título e autor, como
Dune by Frank Herbert.
A execução desta lição adiciona quatro livros. Clique em Executar e digite Book.objects.all() na aba Shell.
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
1Seu primeiro modelo
Seu primeiro modeloTipos de campoPratique por conta própria: Playground de Django