Фильтры по умолчанию Flask-Admin

Я хотел бы отображать только платные заказы в моем представлении списка моделей Flask-Admin.

Вот модели .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)

Вот ModelView для Flask-Admin:

class OrderView(ModelView):
    column_filters = ("paid")


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

Фильтры работают нормально, но я хочу сделать этот фильтр по умолчанию. Или еще лучше, не используйте фильтры и показывайте только заказы, которые выводятся из запроса Order.query.filter(Order.paid==True).

Можно ли делать с Flask-Admin?

Ответ 1

Мы делаем это в нашем приложении, переопределяя 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))

Сообщите мне, если это не сработает для вас, и я могу взглянуть еще раз.