【问题标题】:Display first element of a one-to-many relationship in Flask-Admin在 Flask-Admin 中显示一对多关系的第一个元素
【发布时间】:2023-03-16 08:51:01
【问题描述】:

我目前正在使用 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)

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

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

但这似乎不起作用。似乎我正在以错误的方式解决这个问题。任何提示将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    一种方法是使用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)
        )
    

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

    【讨论】:

      猜你喜欢
      • 2016-12-14
      • 2023-03-03
      • 2020-02-12
      • 2023-04-09
      • 2011-02-25
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多