Valores predeterminados y campos vacíos
Parte de la sección Modelos y el panel de administración del Journey de Django de Coddy. Lección 3 de 23.
Guarda un libro sin indicar si lo leíste, y la base de datos se niega: NOT NULL constraint failed. Todos los campos son obligatorios hasta que indiques lo contrario, con una de estas tres opciones:
has_subtitles = models.BooleanField(default=True)
rating = models.DecimalField(max_digits=3, decimal_places=1, null=True, blank=True)
tagline = models.CharField(max_length=200, blank=True)default es el valor que obtiene una fila nueva cuando no proporcionas ninguno. null=True permite que la columna almacene NULL, que Python lee como None. blank=True permite que los formularios y el administrador acepten el campo vacío.
Un número o una fecha que quizá no conozcas necesitan tanto null=True como blank=True. El texto solo necesita blank=True: el texto vacío se almacena como "", y null le daría dos tipos de valores vacíos. TextField es texto sin límite de longitud, para algo largo como una reseña.
Desafío
FácilHaz opcionales las partes opcionales de Book:
is_readempieza comoFalse.finishedpuede estar vacío: un libro sin terminar no tiene fecha.- Añade un campo
summarypara texto largo sin límite de longitud; puede dejarse vacío, almacenado como texto vacío, no comoNULL.
Pulsa «Ejecutar» y después, en la pestaña Shell, escribe Book.objects.create(title="Emma", author="Jane Austen", year=1815, price="7.50"): imprime <Book: Book object (1)>, no un error.
Pruébalo tú mismo
from django.db import models
class Book(models.Model):
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()
finished = models.DateField()
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