2014-10-13 26 views
11

Yalnızca Flask-Admin model listesi görünümünde ücretli siparişleri görüntülemek istiyorum.Flask-Admin varsayılan filtreler

İşte
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-Yönetici için Modelview geçerli::

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


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

Filtreler iyi çalışır, ancak bu filtre varsayılan yapmak istiyorum Burada

models.py olduğunu. Veya daha iyisi, filtreleri kullanmayın ve yalnızca Order.query.filter(Order.paid==True) sorgusunun çıktılarını gösteren siparişleri göstermeyin.

Flask-Admin ile yapmak mümkün müdür?

cevap

30

Bunu, ModelView'i geçersiz kılarak uygulamamızda yapıyoruz.

https://github.com/mrjoes/flask-admin/blob/master/flask_admin/contrib/sqla/view.py#L654

Ben kaynak kodu Flask-Yönetici için biraz inceledim ve onlar da tıpkı senin olabilir gibi görünüyor, çünkü son bu kodu düzenlenebilir beri kullanımı API kolaylaştırdık:

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) 
(Biz yaklaşık olarak büyük değil get_list() geçersiz kılma bulundu.) Daha sonra gibi kullanabilirsiniz

:

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

Bu sizin için işe yaramıyorsa, bir daha bakalım.

+2

Harika çalışıyor, çok teşekkürler! Sorgu sayımı işlevini "def get_count_query (self)" olarak değiştirmeme rağmen: return self.session.query (func.count ('*')). Filter (Order.paid == True) ", aksi halde bir hata veriyordu , Scalar özniteliği olmayan Int nesnesi hakkında bir şey :) – user2672932

+0

Harika, ben çok memnunum! –

+1

@RachelSanders: Cevabınızı, kullanıcının yorumunu içerecek şekilde güncelledik, bu da Tamam. Bunu araştırdığın için teşekkürler, gerçekten bana yardımcı oldu! –

İlgili konular