我想在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)
这是Flask-Admin的ModelView:
class OrderView(ModelView):
column_filters = ("paid")
admin.add_view(OrderView(Order, db.session))
过滤器工作正常,但我想将此过滤器设为默认值。或者更好的是,不要使用过滤器,只显示输出Order.query.filter(Order.paid==True)
查询的订单。
是否可以使用Flask-Admin?
答案 0 :(得分:35)
我们通过覆盖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)
(我们覆盖了get_list()并不是那么好。)
然后您可以像:
一样使用它admin.add_view(PaidOrderView(Order, db.session))
如果这对您不起作用,请告诉我,我可以再看看。