Anpassen (überschreiben) Kolben-Admin die Submit-Methode, die aus der Bearbeiten-Ansicht
Voraussetzungen:
Ich bin neu in Python und Flask-Admin im besonderen. Ich erstellte einen einfachen test-service, die MondoDB, das halten der Daten mit der Beziehung des "one-to-one' Art.
employeeName -> Gehalt
Sieht das Modell so aus:
class Employee(db.Document):
fullName = db.StringField(max_length=160, unique=True)
salary = db.IntField()
Und ich benutze Flask-Admin beachten Sie die Tabelle mit den Daten und zu Bearbeiten.
Wenn ich ändern will das 'Gehalt' Feld, ich drücken Sie einfach den button 'Bearbeiten' und im Kolben-Admin Standard-Bearbeiten-Ansicht wechsle ich den integer-Wert. Ich drücke auf 'Submit' und einen neuen Wert in der Datenbank ist erfolgreich angewendet.
Frage:
Aber ich muss zum überschreiben der Submit-Methode in der Weise, dass die Blätter, wie es ist, die Funktionalität und fügt einige benutzerdefinierte code. Wie nehmen wir an, ich möchte einen Kommentar hinzufügen, in der log-Datei nach einem tatsächlichen db-submit:
Protokollierung.warning('Das Gehalt von %s: wurde geändert, um /%s', vollständiger name, Gehalt)
Irgendeine Idee, wie das zu erreichen wäre sehr geschätzt werden. Vielleicht könnten Sie mich direkt in den Weg zu gehen, da die Kolben-Admin-Dokumentation nicht gib mir genug Hilfe so weit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie überschreiben
on_model_change
Methode, um Ihre eigene Logik. Überprüfen Sie http://flask-admin.readthedocs.org/en/latest/api/mod_model/#flask.ext.admin.model.BaseModelView.on_model_changeon_model_change
funktioniert.Landete ich beim überschreiben eines
save
Methode in meinem Dokument abgeleitete Klasse.So nun meine Mitarbeiter Klasse enthält code dieser Art:
Heute habe ich festgestellt, dass diese Lösung tatsächlich nichts neues und ist beschrieben auf StackOverflow.
Aber für meinen speziellen Fall denke ich, dass Joes' Antwort ist besser. Ich mag es mehr, wenn ich da überschreiben
on_model_change
ich rufen meinen benutzerdefinierten code nur wenn ich "Datenbank Bearbeiten" durch die Admin-Webseite, und jede programmatischen Betrieb über Datenbank (wiesave
,update
) funktioniert auch mit native-code - das ist genau das, was ich will. Wenn ich overridesave
Methode, werden ich Bedienung alle speichern Betrieb mich, ob Es wurde initiiert von Admin-Bereich oder programmgesteuert durch die server-engine.Gelöst, danke!