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))
Дайте мне знать, если это не сработает для вас, и я могу принять другой облик.