【问题标题】:Flask-Admin and custom field in model模型中的 Flask-Admin 和自定义字段
【发布时间】:2014-12-01 14:50:15
【问题描述】:

我有类似于以下的表格:

class User(Base):
    id    = Column(Integer, primary_key=True)
    name  = Column(String(255, unique=True)

class Document(Base):
    id    = Column(Integer, primary_key=True)
    name  = Column(String(255, unique=True)
    customer_id = Column(ForeignKey('User.id'))

我想列出 Flask-Admin 的 ModelView (sqla) 中的用户以及他们创建的文档数 (func.count(Document))。是否有可能使用 SqlAlchemy 和标准 Flask-Admin ModelView 来实现它,而无需指定自定义 SQL 查询?

【问题讨论】:

  • 我不认为有办法在不使用自定义查询的情况下实现这一目标。请参阅stackoverflow.com/a/21454133/99594 了解几乎相同的问题,您应该使用count 而不是min
  • 你可以添加关系。解释为this
  • 如果其他人像我一样遇到这种情况,正在寻找如何添加不需要自定义数据库查询的自定义字段,this question 中的示例应该会有所帮助。

标签: python flask sqlalchemy flask-admin


【解决方案1】:

您可以通过覆盖 ModelView 类的 get_query() 函数来做到这一点。这将创建您编写的查询的视图,而不是定义的架构。

您可能还需要一个 user_document_table 作为查询中的联接。

例如:

class UserView(ModelView):

column_list = (
    "user_name",
    "n_documents"
)

def get_query(self):
    return (
        self.session.query(
            User.name.label("user_name"), 
            func.count(Document.id).label("n_documents")
        )
        .join(user_document_table)
        .join(Document)
        .group_by(User.id)
    )

【讨论】:

  • 这里唯一的问题是,如果计数为 0,则不会显示该行。将其更改为外连接,您将获得计数为 0 的行。
猜你喜欢
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
  • 2020-01-10
相关资源
最近更新 更多