Django implementiert bereits allgemeine Einschränkungen wie Primär/Fremdschlüssel und eindeutig (für einzelne Felder oder Kombinationen) direkt auf die Datenbankebene. Für spezifischere Einschränkungen ist der beste Platz, um sie zu setzen, in Djangos model validation methods. Auf diese Weise können Sie die Funktionen von Django wie Modellvererbung und Modellformen nutzen, ohne dass Sie in jedem vererbten Modell bzw. in jeder Formularhandhabungsroutine Ihre Abhängigkeitsüberprüfungen neu schreiben müssen.
Die Leistung Ihrer Validierungsmethoden wird so gut sein, wie Sie es schaffen. In der Tat kann es Fälle geben, in denen Sie nicht auf die Datenbank zugreifen müssen. Daher wäre die Leistung wahrscheinlich besser als die Implementierung derselben Einschränkung auf Datenbankebene. Wenn Sie zum Beispiel nach einer Kombination von Modellfeldwerten im zu sichernden Objekt suchen (nicht gegen andere gespeicherte Objekte), müssen Sie nicht auf die Datenbank zugreifen, sondern Ihre Prüfungen auf Python-Objektebene schnell durchführen.
Einschränkungen in dieser Datenbank werden unter anderem zur Optimierung der Abfrageleistung verwendet. Sie können also die Einschränkungen validieren, wo immer Sie wollen, aber ich würde vorschlagen, die Einschränkungen in der Datenbank für die Verwendung des Optimierers aktiviert und validiert zu lassen. – haki