null=True
setzt NULL
(versus NOT NULL
) auf die Spalte in Ihrer DB. Leere Werte für Django-Feldtypen wie DateTimeField
oder ForeignKey
werden wie NULL
in der Datenbank gespeichert .
blank
legt fest, ob das Feld in Formularen benötigt wird. Dies umfasst den Administrator und Ihre benutzerdefinierten Formulare. Wenn blank=True
dann, wird das Feld nicht benötigt, während wenn es ist, kann False
das Feld nicht leer sein.
Die Kombination der beiden ist so häufig, dass Sie normalerweise auch Ihre Datenbank benötigen, um NULL
Werte für dieses Feld zuzulassen , wenn Sie zulassen möchten, dass ein Feld in Ihrem Formular leer ist . Die Ausnahme sind CharField
s und TextField
s, die in Django niemals als gespeichert werden NULL
. Leere Werte werden in der Datenbank als leere Zeichenfolge ( ''
) gespeichert .
Einige Beispiele:
models.DateTimeField(blank=True) # raises IntegrityError if blank
models.DateTimeField(null=True) # NULL allowed, but must be filled out in a form
Offensichtlich sind diese beiden Optionen nicht logisch sinnvoll zu verwenden (obwohl es einen Anwendungsfall geben kann, null=True, blank=False
wenn ein Feld immer in Formularen benötigt werden soll, optional, wenn ein Objekt über etwas wie die Shell bearbeitet wird.)
models.CharField(blank=True) # No problem, blank is stored as ''
models.CharField(null=True) # NULL allowed, but will never be set as NULL
CHAR
und TEXT
Typen werden nie wie NULL
von Django gespeichert , null=True
ist also unnötig. Sie können jedoch eines dieser Felder manuell festlegen None
, um das Festlegen als zu erzwingen NULL
. Wenn Sie ein Szenario haben, in dem dies möglicherweise erforderlich ist, sollten Sie es trotzdem einbeziehen null=True
.