Cómo se imprime un libro
Parte de la sección Modelos y el panel de administración del Journey de Django de Coddy. Lección 5 de 23.
Pulsa Run y escribe Book.objects.all() en la pestaña Shell: todos los libros aparecen como <Book: Book object (1)> y no puedes distinguirlos. Python convierte un objeto en texto mediante su método __str__, y el que recibe cada modelo muestra solo el id. Un modelo puede definir el suyo propio. En el sitio de películas, Movie podría mostrar el título y el año:
class Movie(models.Model):
...
def __str__(self):
return f"{self.title} ({self.released.year})"Después, el shell muestra <Movie: Alien (1979)>, al igual que el administrador y cualquier plantilla que imprima {{ movie }}. __str__ debe devolver el texto. Un método que lo imprime devuelve None, y entonces str() falla con un TypeError.
Desafío
Fácil- Haz que un libro se muestre como su título y autor, como
Dune by Frank Herbert.
La opción Run de esta lección añade cuatro libros. Pulsa Run y escribe Book.objects.all() en la pestaña Shell.
Pruébalo tú mismo
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 las lecciones de Modelos y el panel de administración
1Tu primer modelo
Tu primer modeloTipos de campos3Páginas desde la base de datos
Una lista desde la base de datosUna página para cada libroPractica por tu cuenta: Playground de Django