Flask-Admin default filters

匿名 (未验证) 提交于 2019-12-03 01:52:01

问题:

I would like to display only paid orders in my Flask-Admin model list view.

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) 

Here is ModelView for Flask-Admin:

class OrderView(ModelView):     column_filters = ("paid")   admin.add_view(OrderView(Order, db.session)) 

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.

Is it possible to do with Flask-Admin?

回答1:

We do this in our app by overriding ModelView.

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

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) 

(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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!