2016-05-04 2 views
3

У меня есть модель с методом __repr__, которая используется для отображения в Flask-Admin. Я хочу отобразить другое значение, но не хочу менять модель. Я нашел this answer, но это все еще требует модификации модели. Как я могу указать отдельное представление для Flask-Admin?Изменить представление модели в Flask-Admin без изменения модели

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

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

Update

Файл: 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')) 

Файл: 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)) 

При попытке создать или изменить "ребенка" через администратора панели, я вижу представление из класса «Родитель». Я полагаю, что это из-за отношений, и я не знаю, как переопределить представление только для панели администратора.

ответ

0

Вы можете создать подкласс модели:

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

, а затем использовать MyNewModel вместо MyModel.

+0

Это была моя первая идея сделать это, но в моем случае это не сработает, см. Обновление. – peoff

0

следующие ответы помогли мне решить мою проблему:

Причина была в том, что я пытался заменить __repr__ с __unicode__ вместо этого просто добавьте __unicode__ способ.

Но если кто-нибудь знает решение без изменения models, дайте мне знать, и я добавлю его здесь.