2014-10-13 14 views
11

Chciałbym wyświetlać tylko płatne zamówienia w moim widoku listy modeli Flask-Admin.Domyślne filtry Flask-Admin

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

Oto ModelView do kolby-admin:

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


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

Filtry działają dobrze, ale chciałbym, aby ten domyślny filtr. Albo jeszcze lepiej, nie używaj filtrów i wyświetlaj tylko zamówienia, które są wyjściami zapytania Order.query.filter(Order.paid==True).

Czy można to zrobić za pomocą Flask-Admin?

Odpowiedz

30

Robimy to w naszej aplikacji, zastępując ModelView.

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

Przejrzałem kodu źródłowego nieco do kolby-admin, i zrobili API łatwiejsze w użyciu ponieważ ostatnia edycja tego kodu, ponieważ wygląda jak można po prostu zrobić:

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) 

(byliśmy nadrzędnymi get_list(), która nie jest tak wielka.)

następnie można go używać jak:

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

Daj mi znać, jeśli to nie działa dla Ciebie i mogę spojrzeć jeszcze raz.

+2

Działa świetnie, dziękuję bardzo! Mimo że musiałem zmienić funkcję liczenia zapytań na "def get_count_query (self): return self.session.query (func.count ('*')). Filter (Order.paid == True)", w przeciwnym wypadku wystąpił błąd , coś o obiekcie Int nie posiadającym atrybutu skalarnego :) – user2672932

+0

Wspaniale, tak się cieszę! –

+1

@RachelSanders: Zaktualizowano odpowiedź, aby uwzględnić komentarz użytkownika, mam nadzieję, że wszystko jest w porządku. Dzięki za badanie tego, naprawdę mi pomogło! –

Powiązane problemy