Flask-Admin默认过滤器 [英] Flask-Admin default filters

查看:1791
本文介绍了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)
pre
$ b $ 这里是ModelView for Flask-Admin:

$ $ p $ class OrderView (ModelView):
column_filters =(paid)


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

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



是否可以使用Flask-Admin?

解决方案

通过重写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):
返回self.session.query(self.model).filter(self.model.paid == True)
$ b $ def get_count_query(self ):
返回se filter(self.model.paid == True)

(我们重写了get_list(),这几乎不是那么好。)

然后你可以像这样使用它:

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

让我知道,如果这不适合你,我可以再看一眼。

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?

解决方案

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.

这篇关于Flask-Admin默认过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆