1282 Stimmen

Was ist der Unterschied zwischen null=True und blank=True in Django?

Wenn wir ein Model-Feld in Django hinzufügen, schreiben wir im Allgemeinen:

models.CharField(max_length=100, null=True, blank=True)

Dasselbe wird mit ForeignKey, DecimalField usw. gemacht. Was ist der grundlegende Unterschied zwischen:

  1. null=True nur
  2. blank=True nur
  3. null=True und blank=True

im Vergleich zu verschiedenen (CharField, ForeignKey, ManyToManyField, DateTimeField) Feldern? Was sind die Vor- und Nachteile der Verwendung von Option 1, 2 oder 3?

33voto

Ranju R Punkte 2117

Einfach null=True definiert, dass die Datenbank NULL-Werte akzeptieren soll. Andererseits definiert blank=True, ob dieses Feld bei der Formularüberprüfung leere Werte akzeptieren soll oder nicht (wenn blank=True, akzeptiert es das Formular ohne Wert in diesem Feld, und blank=False [Standardwert] zeigt bei der Formularüberprüfung den Fehler Dieses Feld wird benötigt an.

null=True/False bezieht sich auf die Datenbank

blank=True/False bezieht sich auf die Formularüberprüfung

22voto

Stryker Punkte 5104

Hier ist ein Beispiel für das Feld mit blank=True und null=True

description = models.TextField(blank=True, null=True)

In diesem Fall: blank=True: sagt unserem Formular, dass es in Ordnung ist, das Beschreibungsfeld leer zu lassen

und

null=True: sagt unserer Datenbank, dass es in Ordnung ist, einen Nullwert in unserem Datenbankfeld aufzuzeichnen und keinen Fehler zu geben.

12voto

Nitin Nain Punkte 4398

Wenn Sie null=True setzen, ermöglicht es den Wert Ihrer Datenbankspalte, als NULL festgelegt zu werden. Wenn Sie nur blank=True setzen, wird Django den Standardneuwert für die Spalte auf "" setzen.

Es gibt einen Punkt, an dem null=True auch bei einem CharField oder TextField erforderlich wäre, und das ist, wenn die Datenbank das unique-Flag für die Spalte gesetzt hat. In diesem Fall müssen Sie Folgendes verwenden:

a_unique_string = models.CharField(blank=True, null=True, unique=True)

Vermeiden Sie vorzugsweise das null=True für nicht eindeutige CharField oder TextField. Andernfalls werden einige Felder als NULL und andere als "" festgelegt, und Sie müssen den Feldwert jedes Mal auf NULL überprüfen.

9voto

sharif_42 Punkte 461

Die Standardwerte von null und leer sind Falsch.

Null: Es handelt sich um etwas Datenbankbezogenes. Definiert, ob eine bestimmte Datenbankspalte null-Werte akzeptiert oder nicht.

Leer: Es handelt sich um etwas Validierungsbezogenes. Wird während der Formvalidierung verwendet, wenn form.is_valid() aufgerufen wird.

Das heißt, es ist völlig in Ordnung, ein Feld mit null=True und leer=Falsch zu haben. Das bedeutet auf Datenbankebene kann das Feld NULL sein, aber auf Anwendungsebene ist es ein erforderliches Feld.

Jetzt, wo die meisten Entwickler einen Fehler machen: null=True für stringbasierte Felder wie CharField und TextField zu definieren. Vermeiden Sie das. Andernfalls haben Sie zwei mögliche Werte für "keine Daten", nämlich: Keiner und ein leerer String. Zwei mögliche Werte für "keine Daten" sind überflüssig. Die Django-Konvention ist es, den leeren String anstelle von NULL zu verwenden.

8voto

null = True

Bedeutet, dass es keine Datenbankbeschränkung dafür gibt, dass das Feld ausgefüllt werden muss. Sie können also ein Objekt mit einem Nullwert für das Feld haben, das diese Option hat.

blank = True

Bedeutet, dass es keine Validierungseinschränkung in Django-Formularen gibt. Wenn Sie also ein modelForm für dieses Modell ausfüllen, können Sie das Feld mit dieser Option leer lassen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X