2014-10-07 2 views
1

У меня есть таблицы, аналогичных приведенные ниже:Колба-Admin и пользовательские поля в модели

class User(Base): 
    id = Column(Integer, primary_key=True) 
    name = Column(String(255, unique=True) 

class Document(Base): 
    id = Column(Integer, primary_key=True) 
    name = Column(String(255, unique=True) 
    customer_id = Column(ForeignKey('User.id')) 

Я хотел бы перечислить пользователь в видовом колбовой для Admin (sqla) вместе с количеством документов, которые они создали (Func .count (Документ)). Есть ли возможность достичь этого с помощью SqlAlchemy и стандартного Flask-Admin ModelView без указания пользовательского SQL-запроса?

+1

Я не думаю, что есть способ добиться того, что без использования пользовательского запроса. См. Http://stackoverflow.com/a/21454133/99594 для почти того же вопроса, где вместо 'min' вы должны использовать' count'. – van

+0

Вы можете добавить эти отношения. объясняется как [это] (http://stackoverflow.com/questions/16160507/flask-admin-not-showing-foreignkey-columns) – stamaimer

ответ

2

Вы можете сделать это, переопределив функцию get_query() класса ModelView. Это создаст представление о запросе, который вы пишете, в отличие от определенной схемы.

Возможно, вам также понадобится user_document_table в качестве соединения в вашем запросе.

Например:

class UserView(ModelView): 

column_list = (
    "user_name", 
    "n_documents" 
) 

def get_query(self): 
    return (
     self.session.query(
      User.name.label("user_name"), 
      func.count(Document.id).label("n_documents") 
     ) 
     .join(user_document_table) 
     .join(Document) 
     .group_by(User.id) 
    ) 
+0

Проблема только в том, что если число равно 0, строка не будет отображаться. Измените это на externaljoin, и вы получите строки со счетом 0. –

 Смежные вопросы

  • Нет связанных вопросов^_^