2013-06-19 5 views
13

Bisher habe ich keine klare Erklärung zu leeren, Null und erforderlich - in Djangos Modellen und Formen.Leer, Null und Erforderlich in Django-Modellen und ModelForms


Ich weiß, dass die Standardeinstellung für jeden ist die folgende:

blank = False 
null = False 
required = True 

Ich weiß auch, dass:

blank=True (verwendet in models.py), eine Einrichtung auf dem Formular Ebene, leere Formulare akzeptieren - das zugehörige Feld wird in einem Formular nicht benötigt.

null=True (in models.py verwendet), bedeutet auf Datenbankebene, leere Strings werden als NULL im Gegensatz zu einer leeren Version des zugeordneten Datentyps gespeichert.

required=False (in forms.py verwendet) bedeutet, dass das zugehörige Formularfeld nicht erforderlich ist.


Hoffentlich wird die oben genannten Informationen werden andere dienen gut (bitte lassen Sie mich wissen, ob es irgendwelche Fehler in der Logik sind, und ich werde es aktualisieren).

Meine Frage ist folgende:

Wann weiß ich, wann blank=True vs. required=False zu verwenden. Wenn es mein Ziel ist, ein Formularfeld nicht erforderlich zu machen, könnte ich dies im Modell unter Verwendung von blank=True definieren, oder ich könnte dies im Formular unter Verwendung von required=False definieren. Heißt das, Sie können blank=True in einem Modell definieren und in dem zugehörigen ModelForm diese mit required=True überschreiben?

Auch verwandt, was ist, wenn Sie ein reguläres Formular verwenden (forms.Form)? Da die Form nicht mit einem Modell verknüpft ist (anders als durch die Sichtlogik), was passiert, wenn sie sich wieder gegenseitig widersprechen?

+0

Wenn * was * widerspricht was, wenn ein Formular nicht mit einem Modell verknüpft ist. –

Antwort

2

Es hängt von der Anforderung ab. Irgendwann entscheiden wir uns später, das Feld auf dem Formular obligatorisch zu machen, obwohl es auf dem Modell noch nicht benötigt wird. Aber das Formular wird sicherstellen, dass das Feld ausgefüllt werden muss.

Sie können null=True auf dem Modell haben, und später können Sie dieses Feld in Formular obligatorisch machen. Aber Sie können ein Feld nicht optional in Form machen, wenn es für das Modell obligatorisch ist, was später zu einem Datenbankfehler führen wird.

+0

Das Feld ist in der Form obligatorisch, wenn im Modell "null = True" ist. Nur 'blank = Wahr 'im Modell legt' required = False' in der entsprechenden ModelForm fest.Ich bin von diesem unintelligenten Aspekt der Modellformen vor – krypto07

7

Die Widersprüche sind nicht wichtig. Ich denke, das bringt Flexibilität in die Entwicklung einer Django-Anwendung. Wenn Sie z. B. eine Bibliothek eines Drittanbieters verwenden, die einige Modelle definiert, und sie blank=True festlegen, aber für andere Zwecke müssen Sie dieses Feld zwingend angeben. Sie können es dann in Ihren Formularen korrigieren, ohne den Bibliothekscode des Drittanbieters zu berühren.

Dies fügt nur etwas Flexibilität in das Framework IMHO, das bringt keinen Schaden. Sie können es für Ihre eigenen Zwecke verwenden. Die Widersprüche sind nicht signifikant.

Hoffe, das hilft!

+0

verbrannt worden. Nochmals vielen Dank, dies macht Sinn, und gibt auch viel mehr Kraft für Formulare. – Joker

+0

Sie sind herzlich willkommen :) –

+2

Es ist eine gute Antwort, die den Grund und seinen Anwendungsfall erklären. – flyingfoxlee

Verwandte Themen