2011-01-05 23 views
41

Ich muss meine Django-Anwendung erlauben mir einen Standardwert von NULL für ein bestimmtes Modellfeld festgelegt haben. Ich habe über die, Null und Standard Parameter, aber es ist nicht sehr klar, welche Kombination der drei brauche ich, um den gewünschten Effekt zu bekommen. Ich habe versucht, default=NULL Einstellung, aber es war ein Fehler. Wenn ich blank=True, null=True und keinen Standard angeben, wird es nur Standard zurück auf NULL kommen Laufzeit?Django Model Feld Default zu Null

Antwort

67

Versuchen Sie default=None. Es gibt keine NULL in python.

+0

Das hat den Trick, danke. :) – SPoage

+2

Nur zur Verdeutlichung bezieht sich der NULL, auf den er sich bezieht, auf das Django-Modellfeld. Dies ermöglicht/verhindert, dass ein None-Wert für diesen Wert verwendet wird, der in der Datenbank als NULL gespeichert wird, nicht in Python. Leer bezieht sich darauf, ob der Wert für die Validierung in forms/admin/etc benötigt wird. – Nexion

+0

@Nexion, 'default = None' erlaubt oder verbietet die Verwendung eines None-Wertes. Es teilt Django einfach mit, was der Wert des Feldes sein soll, wenn es nicht spezifiziert ist. 'null = True' erlaubt die Verwendung von None im Python-Code. Es wird in der Datenbank als NULL behandelt. Und Sie haben recht, wenn Sie für die Formularvalidierung ein Leerzeichen verwenden. – Bobort

22

Wenn Sie im Modellfeld null = True angeben, wird der Wert in der Datenbank als NULL gespeichert, wenn der Benutzer keinen Wert angibt.

+2

Das ist in den meisten Fällen nicht der Fall, da normalerweise eine leere Zeichenfolge gespeichert wird. – hY8vVpf3tyR57Xib

+0

@ AlfonsIngomar Falsch, aus der Dokumentation - https://docs.djangoproject.com/en/1.8/ref/models/fields/#null "Wenn True, Django wird leere Werte als NULL in der Datenbank speichern. Standard ist Falsch." – Kevin

+4

Sehen Sie sich den nächsten Absatz an: Vermeiden Sie die Verwendung von null für string-basierte Felder wie CharField und TextField **, da leere String-Werte immer als leere Strings gespeichert werden und nicht als NULL **. Wenn ein stringbasiertes Feld null = True hat, bedeutet dies, dass es zwei mögliche Werte für "keine Daten" gibt: NULL und die leere Zeichenfolge. In den meisten Fällen ist es überflüssig, zwei mögliche Werte für "keine Daten" zu haben. Die Django-Konvention verwendet die leere Zeichenfolge, nicht NULL. – hY8vVpf3tyR57Xib