Flask-фильтры администратора по умолчанию

Я хотел бы отображать только платные заказы в моем представлении списка моделей 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)

вот 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))

Дайте мне знать, если это не сработает для вас, и я могу принять другой облик.