21

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)

Flask-Admin の ModelView は次のとおりです。

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


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

フィルターは正常に機能しますが、このフィルターをデフォルトにしたいと思います。または、フィルターを使用せず、Order.query.filter(Order.paid==True)クエリの出力である注文のみを表示することをお勧めします。

Flask-Adminで行うことは可能ですか?

4

1 に答える 1

47

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))

うまくいかない場合はお知らせください。もう一度お調べいたします。

于 2014-10-14T00:41:01.587 に答える