Flask-Admin默认过滤器

use*_*932 15 python flask flask-admin

我想在Flask-Admin模型列表视图中仅显示付费订单.

这是models.py:

class Order(db.Model):
   id = db.Column(db.Integer, primary_key=True)
   amount = db.Column(db.Integer)
   description = db.Column(db.String)
   paid = db.Column(db.Boolean, default=False)
Run Code Online (Sandbox Code Playgroud)

这是Flask-Admin的ModelView:

class OrderView(ModelView):
    column_filters = ("paid")


admin.add_view(OrderView(Order, db.session))
Run Code Online (Sandbox Code Playgroud)

过滤器工作正常,但我想使此过滤器默认.或者更好的是,不要使用过滤器,只显示输出Order.query.filter(Order.paid==True)查询的订单.

是否可以使用Flask-Admin?

Rac*_*ers 37

我们通过重写ModelView在我们的应用程序中执行此操作.

https://github.com/mrjoes/flask-admin/blob/master/flask_admin/contrib/sqla/view.py#L654

我仔细查看了Flask-Admin的源代码,自从我们上次编辑这段代码以来,它们使API更容易使用,因为它看起来像你可以这样做:

from flask.ext.admin.contrib.sqla.view import ModelView, func

class PaidOrderView(ModelVew):
    def get_query(self):
      return self.session.query(self.model).filter(self.model.paid==True)

    def get_count_query(self):
      return self.session.query(func.count('*')).filter(self.model.paid==True)
Run Code Online (Sandbox Code Playgroud)

(我们覆盖了get_list(),这几乎没有那么好.)

然后你可以使用它:

admin.add_view(PaidOrderView(Order, db.session))
Run Code Online (Sandbox Code Playgroud)

如果这对您不起作用,请告诉我,我可以再看看.

  • 它非常好,非常感谢!虽然我不得不将查询计数功能更改为"def get_count_query(self):return self.session.query(func.count('*')).filter(Order.paid == True)",否则会出错,关于Int对象没有标量属性:) (2认同)