Flask管理未显示外键列

2024-04-20 05:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

    def __repr_(self):
        return '<Parent %r>' % (self.name)

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


class Child(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(120))
    parent = db.Column(db.Integer, db.ForeignKey(Parent))

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

你好-

上面的代码是我试图创建的flask管理页面的一个示例。目标是在子级的创建页面上有一个名称文本框和一个选择父级的下拉列表。

在上面的设置中,只有名称字段。缺少父下拉框。

有什么办法让它发生吗?


Tags: keynameselfaddidtruedbstring
3条回答

您可能需要通过一个子类为flask admin指定一些附加选项:

class ChildView(ModelView):
    column_display_pk = True # optional, but I like to see the IDs in the list
    column_hide_backrefs = False
    column_list = ('id', 'name', 'parent')


admin.add_view(ChildView(Parent, db.session))

如果您将Child类更改为:

class Child(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(120))
    parent_id = db.Column(db.Integer, db.ForeignKey('parent.id'))
    parent = db.relationship('Parent', backref=db.backref('children', lazy='dynamic'))

我不太了解这个,我也不知道你是否需要后面的参考资料,但这个设置对我和烧瓶管理工作。

这是一个包罗万象的解决方案,不需要手动维护。

from sqlalchemy import inspect

class ChildView(ModelView):
    column_display_pk = True # optional, but I like to see the IDs in the list
    column_hide_backrefs = False
    column_list = [c_attr.key for c_attr in inspect(Child).mapper.column_attrs]


admin.add_view(ChildView(Child, db.session))

相关问题 更多 >