在Flask-Admin中显示一对多关系的第一个元素

时间:2014-01-29 15:01:09

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

我目前正在使用Flask-Admin来创建管理界面,但我遇到了障碍。假设我有两个看起来像这样的类:

class Part(db.Model):
  id = db.Column(db.Integer, primary_key=True, unique=True)
  part_data = db.relationship("PartHistory", backref="part")
  name = db.Column(db.String(255))

class PartHistory(db.Model):
  id = db.Column(db.Integer, primary_key=True, unique=True)
  part_id = db.Column(db.Integer, db.ForeignKey('part.id'))
  date_checked = db.Column(db.Date)

Part在PartHistory上有一对多的关系。我想创建一个视图,在一列中显示部件名称,在另一列中显示第一个date_checked。我试过这样的事情:

column_list = ("name", "part_data[0].date_checked")

但这似乎不起作用。我似乎也错了。任何提示将不胜感激。

1 个答案:

答案 0 :(得分:3)

一种方法是使用column-property来定义一个计算列,该列将填充您需要的字段。下面我使用了min值,但您可以构造任意查询以获取第一个ID(实现该特定后端的最佳方法):

class Part(db.Model):
  # ...
  date_checked = db.column_property(
        db.select([db.func.min(PartHistory.date_checked)]).\
            where(PartHistory.part_id==id).\
            correlate_except(PartHistory)
    )

请注意,您可能无法按此列排序。