Standardwerte und leere Felder
Teil des Abschnitts Modelle und Admin-Bereich der Django-Journey von Coddy. Lektion 3 von 23.
Speicherst du ein Buch, ohne anzugeben, ob du es gelesen hast, weigert sich die Datenbank: NOT NULL constraint failed. Jedes Feld ist erforderlich, bis du etwas anderes festlegst, mit einer von drei Optionen:
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 ist der Wert, den eine neue Zeile erhält, wenn du keinen angibst. null=True ermöglicht es der Spalte, NULL zu speichern, was Python als None ausliest. blank=True ermöglicht es Formularen und der Admin-Oberfläche, das Feld leer zu akzeptieren.
Für eine Zahl oder ein Datum, die du möglicherweise nicht kennst, brauchst du sowohl null=True als auch blank=True. Für Text brauchst du nur blank=True: Leerer Text wird als "" gespeichert, und null würde zwei Arten von Leerwerten bedeuten. TextField ist Text ohne Längenbegrenzung, etwa für etwas Längeres wie eine Rezension.
Aufgabe
EinfachMache die optionalen Teile von Book optional:
is_readbeginnt mitFalse.finisheddarf leer sein: Ein noch nicht fertig gelesenes Buch hat kein Datum.- Füge ein Feld
summaryfür langen Text ohne Längenbegrenzung hinzu; es darf leer gelassen und als leerer Text gespeichert werden, nicht alsNULL.
Klicke auf „Ausführen“ und gib dann im Tab „Shell“ Book.objects.create(title="Emma", author="Jane Austen", year=1815, price="7.50") ein: Es wird <Book: Book object (1)> ausgegeben, kein Fehler.
Probier es selbst
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()
Alle Lektionen in Modelle und Admin-Bereich
1Dein erstes Modell
Dein erstes ModellFeldtypenÜbe selbstständig: Django-Playground