2016-05-04 11 views
3

Ich habe ein Modell mit einer __repr__ Methode, die für die Anzeige in Flask-Admin verwendet wird. Ich möchte einen anderen Wert anzeigen, möchte aber das Modell nicht ändern. Ich habe this answer gefunden, aber das erfordert noch das Modifizieren des Modells. Wie kann ich eine separate Darstellung für Flask-Admin angeben?Ändern der Modelldarstellung in Flask-Admin ohne Modifizierung des Modells

class MyModel(db.Model): 
    data = db.Column(db.Integer) 

    def __repr__(self): 
     return '<MyModel: data=%s>' % self.data 

aktualisieren

Datei: models.py

class Parent(db.Model): 
    __tablename__ = "parent" 
    id = db.Column(db.Integer, primary_key=True) 
    p_name = db.Column(db.Text) 
    children = db.relationship('Child', backref='child', lazy='dynamic') 

    def __repr__(self): 
     return '<Parent: name=%s' % self.p_name 


class Child(db.Model): 
    __tablename__ = "child" 
    id = db.Column(db.Integer, primary_key=True) 
    c_name = db.Column(db.Text) 
    parent_id = db.Column(db.Integer, db.ForeignKey('parent.id')) 

Datei: admin.py

from flask.ext.admin import Admin 
from flask.ext.admin.contrib.sqla import ModelView 
from app import app, db 
from models import Parent, Child 


admin = Admin(app, 'My App') 

admin.add_view(ModelView(Parent, db.session)) 
admin.add_view(ModelView(Child, db.session)) 

Wenn ich versuche, Admin zu erstellen oder zu bearbeiten "Kind" durch Panel, sehe ich die Darstellung von "Eltern" -Klasse. Ich nehme an, dass es wegen der Beziehung ist und ich nicht weiß, wie man die Darstellung für Admin-Panel nur neu definiert.

Antwort

0

könnten Sie die Modellunterklasse:

class MyNewModel(MyModel): 
    def __repr__(self): 
     return '<MyModel: DATA IS %d!>' % self.data 

und dann MyNewModel statt MyModel verwenden.

+0

Es war meine erste Idee, so zu machen, aber es funktioniert nicht in meinem Fall, bitte sehen Sie ein Update. – peoff

0

folgende Antworten haben mir geholfen, mein Problem zu lösen:

Die Ursache, dass war ich versuchte __repr__ mit __unicode__ anstatt ersetzen Sie einfach add __unicode__ Methode.

Aber wenn jemand Lösung kennt, ohne models zu ändern, lassen Sie mich wissen, und ich werde es hier hinzufügen.