Flask-Admin 默认过滤器 [英] Flask-Admin default filters
问题描述
我想在我的 Flask-Admin 模型列表视图中只显示支付的订单.
I would like to display only paid orders in my Flask-Admin model list view.
这是models.py:
Here is 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:
Here is ModelView for Flask-Admin:
class OrderView(ModelView):
column_filters = ("paid")
admin.add_view(OrderView(Order, db.session))
过滤器工作正常,但我想将此过滤器设为默认值.或者更好的是,不要使用过滤器,只显示 Order.query.filter(Order.paid==True)
查询输出的订单.
Filters work fine, but I would like to make this filter default. Or better yet, do not use filters, and only show orders that are output of Order.query.filter(Order.paid==True)
query.
是否可以使用 Flask-Admin?
Is it possible to do with Flask-Admin?
推荐答案
我们通过覆盖 ModelView 在我们的应用程序中做到这一点.
We do this in our app by overriding ModelView.
https://github.com/mrjoes/flask-admin/blob/master/flask_admin/contrib/sqla/view.py#L654
我仔细查看了 Flask-Admin 的源代码,自从我们上次编辑此代码以来,它们使 API 更易于使用,因为看起来您可以这样做:
I looked through the source code a bit for Flask-Admin, and they've made the API easier to use since we last edited this code because it looks like you can just do:
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().)
(We were overriding get_list() which is not nearly as great.)
然后你可以像这样使用它:
You can then use it like:
admin.add_view(PaidOrderView(Order, db.session))
如果这对您不起作用,请告诉我,我可以再看看.
Let me know if that doesn't work for you and I can take another look.
这篇关于Flask-Admin 默认过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!