11
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))

你好 -

上面的代码是我正在尝试创建的烧瓶管理页面的示例。目标是在孩子的创建页面上有一个名称文本框和一个下拉菜单以选择父母。

通过上述设置,只有名称字段。缺少父下拉框。

任何想法如何实现它?

4

4 回答 4

19

如果您将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'))

我对此知之甚少,也不知道您是否需要反向引用,但此设置适用于 Flask-Admin。

于 2013-04-24T13:29:47.013 回答
19

您可能需要通过子类为 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))
于 2013-04-25T09:19:16.947 回答
3

这是一个无需人工维护的全包解决方案。

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))
于 2019-08-23T17:44:51.717 回答
0

对于它的价值,这里列出的解决方案都不适合我。我遇到了外键没有出现在 Flask-Admin 中的问题。

这就是他们出现的原因:

class CustomModelViewName(ModelView):
    can_delete = True
    column_hide_backrefs = False
    column_list = ["column_name", "column_name", "etc", "etc", "etc"]
    column_searchable_list = ["column_name"]
于 2019-09-25T21:31:56.720 回答