2014-01-15 4 views
10

Voraussetzungen:
Ich bin neu in Python und Flask-Admin im Besonderen. Ich habe einen einfachen Testdienst mit MondoDB erstellt, der die Daten in einer "Eins-zu-Eins-Beziehung" hält.anpassen (Override) Flask-Admin Submit-Methode von Bearbeitungsansicht

employeeName -> Gehalt

Das Modell sieht so aus:

class Employee(db.Document): 
    fullName = db.StringField(max_length=160, unique=True) 
    salary = db.IntField() 

Und ich Flask-Admin die Tabelle mit den Daten zu beobachten und sie zu bearbeiten. Als ich das ‚Gehalt‘ Feld ändern will, ich drücken Sie einfach die ‚Bearbeiten‘ Button und in Flask-Admin-Standardbearbeitungsansicht ich den Integer-Wert ändern. Ich drücke 'Submit' und ein neuer Wert in der Datenbank wurde erfolgreich angewendet.

Frage:
Aber ich brauche die Submit-Methode in der Art und Weise außer Kraft zu setzen, die Blätter, da sie die Funktionalität und fügt einige benutzerdefinierte Code. Wie nehmen wir an, ich einen Kommentar in der Protokolldatei nach einem tatsächlichen db einreichen hinzufügen möchten:

logging.warning (‚Das Gehalt% s: wurde geändert /% s‘, fullname, Gehalt)

Alle vorschläge, wie das zu erreichen wäre sehr geschätzt. Vielleicht könntest du mich auf dem Weg dorthin anweisen, da die Flask-Admin-Dokumentation mir bisher nicht genug hilft.

Antwort

1

ich eine save Methode in meinen Dokumenten abgeleiteten Klasse überschreiben endete. So jetzt meine Mitarbeiter Klasse enthält diese Art von Code:

def save(self, *args, **kwargs): 
    print 'whatever I want to do myself is here' 
    return super(Employee, self).save(*args, **kwargs) 

Heute fand ich, dass diese Lösung eigentlich nichts Neues und ist described on StackOverflow.

Aber für meinen speziellen Fall denke ich Joes Antwort besser ist. Ich mag es mehr, denn wenn ich on_model_change überschreibe, rufe ich meinen benutzerdefinierten Code nur auf, wenn ich die Datenbank über die Admin-Webseite bearbeite; und jede programmatische Operation über Datenbank (wie save, update) funktioniert mit nativem Code - was genau ich will. Wenn ich die Methode save überschreibe, werde ich jede Operation selbst bearbeiten, ob sie vom Admin-Bereich oder programmgesteuert von der Server-Engine initiiert wurde.

gelöst, danke!

+0

Danke für diesen Zusatz. Es ist sehr hilfreich für mich. –

+0

@AlisonS Schön, dass es geholfen hat. Gern geschehen, Alison) – makaron