小能豆

如何告诉 flask-admin 在显示外键字段时使用替代表示?

py

如何告诉 flask-admin 在显示外键字段时使用替代表示?


阅读 21

收藏
2024-11-05

共1个答案

小能豆

flask-admin 中显示外键字段时,你可以使用外键关联表中的某个字段作为替代表示。可以通过在 ModelView 中定义 column_display_pk 或者使用 __str____repr__ 方法来实现。

方法 1:重写 __str__ 方法

在关联的模型类中重写 __str____repr__ 方法,以返回你希望显示的字符串内容。

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))

    def __str__(self):
        return self.name

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User', backref=db.backref('posts', lazy=True))

在这个例子中,User 模型的 __str__ 方法返回用户的名字,因此在 Post 模型中使用 User 作为外键时,Flask-Admin 会自动显示 User.name

方法 2:在 ModelView 中使用 column_listcolumn_formatters

如果你希望对外键字段有更精细的控制,可以在 ModelView 中使用 column_formatters 自定义显示格式。

from flask_admin.contrib.sqla import ModelView
from flask_admin import Admin

class PostView(ModelView):
    column_list = ('title', 'user')  # 指定显示的列
    column_formatters = {
        'user': lambda v, c, m, p: m.user.name  # 使用 user.name 作为显示内容
    }

admin = Admin()
admin.add_view(PostView(Post, db.session))

在这个例子中,我们通过 column_formatters 指定了 user 字段的显示格式,将其替换为 user.name

方法 3:使用 column_labels

此外,你可以使用 column_labels 来更改列的显示名称。

class PostView(ModelView):
    column_list = ('title', 'user')
    column_labels = {'user': 'Author'}  # 更改字段显示名称

以上几种方法可以帮助你在 Flask-Admin 中更直观地显示外键字段。

2024-11-05