Menu
CoddyTech

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.

challenge icon

Desafío

Fácil

Haz opcionales las partes opcionales de Book:

  • is_read empieza como False.
  • finished puede estar vacío: un libro sin terminar no tiene fecha.
  • Añade un campo summary para texto largo sin límite de longitud; puede dejarse vacío, almacenado como texto vacío, no como NULL.

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

Practica por tu cuenta: Playground de Django