Die blank
Option wird in der Formularvalidierung verwendet, und die null
verwendet wird, wenn auf die Datenbank zu schreiben.
Sie könnten also null=True
zu diesem Feld hinzufügen.
EDIT: weiterhin den Kommentar
Betrachtet man die beiden Schritte, wenn das Objekt zu speichern:
- Validator (gesteuert durch
blank
)
- Datenbank Begrenzung (gesteuert durch
null
)
Für default
Option, nehmen Sie IntegerField
zum Beispiel
default=5, blank=True, null=False
, übergeben Sie (1), auch wenn Sie keinen Wert zugewiesen haben (blank=True
), übergeben Sie (2), weil es einen Standardwert (5) hat und 5
statt None
an DB schreibt.
blank=True, null=False
, die (1) aber nicht (2) bestehen, weil sie versucht, None
an DB zu schreiben. Wenn Sie ein Feld optional machen möchten, verwenden Sie entweder default=SOMETHING, blank=True, null=False
oder blank=True, null=True
.
Eine weitere Ausnahme ist das string-ähnliche Feld, z. B. CharField
.
Es wird empfohlen, die blank=True
allein zu verwenden und null=False
hinter sich zu lassen.
Dies macht ein Feld entweder eine Zeichenfolge (> = 1 Zeichen) oder eine leere Zeichenfolge ('', mit len () == 0) und niemals None
.
Der Grund ist, dass, wenn null=True
gesetzt ist, gibt es zwei mögliche Werte für den Zustand "unset": leere Zeichenfolge und None
, die verwirrend ist (und Bugs verursachen könnte).
Was bedeutet 'blank = True 'muss immer mit' null = True' verwendet werden? Warum kann ich in meinem Formular nicht leer wählen? Ich habe 'blank = True' verwendet. –
'assigned_to == None' hat den Formularvalidierer, aber keine Datenbank übergeben. Ohne 'null = True' können Sie 'None' nicht in die Datenbank schreiben. Wenn Sie also ein optionales Feld wünschen, setzen Sie sowohl 'blank' als auch' null' auf 'True'. – user1034937
Es gibt jedoch zwei Ausnahmen, "default" -Option und string-ähnliche Felder. (Ich möchte nach dem Post, anstatt hier, den Kommentar hinzufügen.) – user1034937