【问题标题】:flask-admin not showing foreignkey columns烧瓶管理员不显示外键列
【发布时间】:2013-04-23 03:39:43
【问题描述】:
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))

你好-

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

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

有什么想法可以实现吗?

【问题讨论】:

    标签: python flask flask-sqlalchemy flask-admin flask-extensions


    【解决方案1】:

    如果你把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。

    【讨论】:

    • 太棒了!今晚我会试试的。我需要任何primaryjoin/secondaryjoin 信息吗?我对此有很多错误。希望您的更改会非常有效!
    • 老实说,我不知道。我从未见过任何关于使用 Flask-Alchemy 或 Flask-Admin 的 primaryjoin/secondaryjoin。
    • 工作原理:Flask-Admin 使用 ORM 对象,例如模型、关系等。默认情况下,Flask-Admin 将忽略模型中的外键,因为它们只包含一些数字和 Flask-管理员希望使用具体的 ORM 对象。因此,当您在模型上有外键时,请确保不要忘记模型之间的 ORM 级别链接 - 关系。 Flask-Admin 将使用此链接显示相关模型。不,你不需要做花哨的事情或添加反向引用来使其工作。
    【解决方案2】:

    您可能需要通过子类为 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))
    

    【讨论】:

    • 正在寻找一种显示 PK 的方法,完美!
    【解决方案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))
    

    【讨论】:

      【解决方案4】:

      不管怎样,这里列出的解决方案都不适合我。我遇到了外键没有出现在 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"]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-11
        • 2015-09-17
        • 1970-01-01
        相关资源
        最近更新 更多