Ich habe einen pre_save
-Signalhandler für eine Reihe von Modellen, die in eine andere Datenbank schreiben. Wenn etwas schief geht, möchte ich den gesamten Speichervorgang abbrechen oder dem Benutzer eine Nachricht senden.
Basiert auf Anzeige einer benutzerdefinierten Nachricht vom Signal im Admin Ich schrieb eine Mischung mit Methoden wie:
%Vor% Dadurch kann ich eine Exception vom pre_save
-Handler auslösen und die Nachricht dem Benutzer anzeigen. Das Problem dabei ist, dass die Admin-Konsole nichts anzeigt, obwohl dies das eigentliche Model.save()
überspringt. Daher wird das Objekt weiterhin als erfolgreich gespeichert gemeldet.
Wenn ich den pre_save
-Handler in einen post_save
-Handler änderte, würde dies die Basis Model.save()
ermöglichen und zumindest würde Django den korrekten Zustand der Dinge melden, aber die Informationen, die ich in der anderen Datenbank brauche basierend auf dem vorherigen Zustand des Objekts, also muss ich vor dem Speichern darauf zugreifen.
Ich habe auch darüber nachgedacht, die Fehlermeldung in das pre_save
des Objekts einzufügen und es in der save_model()
des Mixins herauszuziehen - aber das wird komplizierter bei den anderen ModelAdmin
save Methoden wie save_formset()
.
Gibt es einen guten Weg, dies zu tun?
Das Auffangen dieser Art von Fehlern sollte nicht wünschenswert sein. Dies könnte bedeuten, dass Sie Ihren Benutzern zarte Informationen aussetzen, z. über die Datenbank (wenn es einen IntegrityError gibt). Da dies die normale Fehlerbehandlung umgeht, können Sie auch Nachrichten vermissen, die Sie über Fehler informieren.
Wenn eine Überprüfung erforderlich ist, um falsche / unvollständige Daten einzugeben, die ein Benutzer eingegeben hat, müssen Sie dies in def clean(self)
Tags und Links django django-admin