繁体   English   中英

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

[英]Change model representation in Flask-Admin without modifying model

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

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

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

更新

文件:模型.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))

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

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

原因在于我试图用__unicode__替换__repr__而不是添加__unicode__方法。

但如果有人知道解决方案而不修改models ,请告诉我,我会在这里添加。

您可以继承模型:

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

然后使用MyNewModel而不是MyModel

我有同样的问题,我发现这个解决了:

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

setattr(Parent, '__repr__', Child.__repr__)

它重载了Parent.__repr__ ,但现在您不能更改 SQLA model。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM