flask-admin没有显示foreignkey列

scr*_*345 10 python flask flask-sqlalchemy flask-extensions

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))
Run Code Online (Sandbox Code Playgroud)

你好 -

上面的代码是我试图创建的flask-admin页面的示例.目标是在Child的创建页面上有一个名称文本框和一个下拉选择父项.

通过上述设置,只有名称字段.父下拉框丢失.

任何想法如何实现它?

Cas*_*sey 17

您可能需要通过子类为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))
Run Code Online (Sandbox Code Playgroud)


Jas*_*ijn 16

如果你把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'))
Run Code Online (Sandbox Code Playgroud)

我不太了解这一点,我不知道你是否需要后退参考,但这个设置适用于Flask-Admin.

  • 它的工作原理:Flask-Admin适用于ORM对象,例如模型,关系等.默认情况下,Flask-Admin将忽略模型中的外键,因为它们只包含一些数字,而Flask-Admin希望具体的ORM对象可以使用.因此,当您在模型上有外键时,请确保您不要忘记模型之间的ORM级别链接 - 关系.Flask-Admin将使用此链接显示相关模型.不,你不需要做任何花哨的东西或添加backrefs来使它工作. (3认同)