Default Filters Flask-Admin

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

Here are the .py models:

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 the ModelView for Flask-Admin:

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

Filters work fine, but I want to make this filter by default. Or even better, don’t use filters and only show orders that are displayed from Order.query.filter(Order.paid==True) .

Can I do with Flask-Admin?

+11
source share
1 answer

We do this in our application, overriding ModelView.

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

I was looking a bit for the source code for Flask-Admin, and they have simplified the use of the API 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 redefined get_list (), which is not so big.)

Then you can use it, for example:

 admin.add_view(PaidOrderView(Order, db.session)) 

Let me know if this does not work for you, and I can take a look again.

+30
source

Source: https://habr.com/ru/post/1266342/


All Articles