在不修改模型的情况下更改Flask-Admin中的模型表示

时间:2016-05-04 14:57:21

标签: python flask flask-admin

我有一个带__repr__方法的模型,用于在Flask-Admin中显示。我想显示不同的值,但不想更改模型。我找到this answer,但仍需要修改模型。如何为Flask-Admin指定单独的表示形式?

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

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

更新

档案: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))

当我尝试通过管理面板创建或编辑“child”时,我会看到“Parent”类的表示。我想这是因为关系,我不知道如何重新定义管理面板的表示。

2 个答案:

答案 0 :(得分:1)

以下答案帮助我解决了我的问题:

原因在于我尝试将__repr__替换为__unicode__,而只是添加__unicode__方法。

但如果有人在不修改models的情况下知道解决方案,请告诉我,我会在此处添加。

答案 1 :(得分:0)

你可以继承模型:

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

然后使用MyNewModel代替MyModel