Umgang mit SQL-Constraint-Exceptions in Odoo ORM

8

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:

%Vor%

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 :

%Vor%

Folglich sieht der Endbenutzer nur die Internal Server Error Seite.

Wie kann ich UNIQUE-Constraint-Verletzungen korrekt behandeln?

    
Ludwik Trammer 17.11.2014, 10:33
quelle

3 Antworten

1

Sie können den cr.savepoint() Kontextmanager: %Vor%

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 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:

%Vor%     
Naglis 08.02.2018, 20:07
quelle
5

Zuerst müssen Sie in Ihrem Fangcode Ihren Datenbankcursor festschreiben oder schließen, um die Sperre aufzuheben.

    
Emanuel 28.11.2014 15:00
quelle
4

Hier ist ein Beispiel, das Emanuels Antwort erweitert:

%Vor%     
Ludwik Trammer 28.11.2014 17:19
quelle

Tags und Links