Ist die Validierung Django Modell nur durch die Formen API behandelt?
-
03-07-2019 - |
Frage
Ist dies der einzige Weg, individuelle Modellvalidierung zu schaffen? Um es zu machen, die Formen mit? Was passiert, wenn ich möchte die Datenbank Daten senden durch andere Mittel als Formen?
Lösung
Zur Zeit Django bietet keine Modell-Level-Validierung (neben basic "NOT NULL", "einzigartig" und Länge Validierungen). Dies ist auf der ToDo-Liste, aber höchstwahrscheinlich nicht kommende Version 1.1 passen.
Sie können Validierungsbezogene Aufgaben in save()
Methode des Modells oder verwenden before_save
Signal (Anhebung Ausnahme in Signal-Handler bewirkt, dass die Transaktion rückgängig gemacht werden).
Andere Tipps
Modellvalidierung wird in Kürze in Django Version 1.2 zur Verfügung. Es ist verfügbar jetzt , wenn Sie einen aktuellen Django svn checkout des Rumpfes verwendet werden.
Verschiedene clean
Methoden sind jetzt verfügbar. Siehe http://docs.djangoproject.com/en/dev/ref / models / instances / # id1 .
In der Regel sollten Sie in der Lage zu handhaben, was Sie den eingebauten wollen durch in Modell Meta Optionen . Sie können auch speichern Sie die Methode außer Kraft setzen Validierung / Sanitär auszuführen. Wenn das nicht ausreicht, können Sie Ihren eigenen Feldtyp .
Das Problem ist, dass es kein gutes erwartetes Verhalten ist. Was soll passieren? Sollte eine Ausnahme ausgelöst werden? Die Felder sind nur dann wirklich eine Abstraktion auf Datenbankebene, so sollte es nicht mehr Informationen drin sein als das, was die Datenbank wissen muss.