Ich habe eine eindeutige Einschränkung in meinem Modell definiert:
%Vor%Und ein Controller mit Code zum Erstellen neuer Objekte:
%Vor% Wenn die UNIQUE-Einschränkung verletzt wird, erhalte ich eine IntegrityError
-Ausnahme. Ich möchte es abfangen und dem Benutzer eine andere Nachricht anzeigen:
Das funktioniert ... irgendwie. Die IntegrityError
wurde erfolgreich abgefangen, aber alle nachfolgenden Datenbankoperationen (die, soweit ich weiß, vom Modul website
automatisch ausgelöst werden) enden in InternalError
:
Folglich sieht der Endbenutzer nur die Internal Server Error
Seite.
Wie kann ich UNIQUE-Constraint-Verletzungen korrekt behandeln?
Sie können den Alle Datenbankaufrufe innerhalb des Kontextmanagers werden in einem PostgreSQL-Sicherungspunkt ausgeführt. Wenn eine Ausnahme auftritt, wird der Sicherungspunkt (nicht die Transaktion) zurückgesetzt, sodass Sie innerhalb der aktuellen Datenbanktransaktion weitere Aufrufe vornehmen können. Wenn Sie außerdem nicht möchten, dass cr.savepoint()
Kontextmanager: IntegrityError
s protokolliert wird, können Sie den openerp.sql_db
-Logger (oder odoo.sql_db
, wenn Sie Odoo 10 oder höher verwenden) mit dem mute_logger
Kontextmanager / Dekorateur: