2017-03-09 19 views
0

是的,我已經看到了this question,並且已經閱讀了儘可能多的flask_admin文檔,因爲我可以忍受。也就是說,這一切都非常密集,而且對於看似簡單的問題而言,我感到茫然。如何在flask_admin中顯示/編輯association_proxy列

代碼:

模型(APP/models.py)

# Define the models for Paper and Keywords, with intermediary KeywordPaper 
# Allows convenience of Paper.keywords += ["keyword"] 

class Paper(db.Model): 
    # ... 
    keywords = association_proxy('paper_keywords', 'keyword', 
           creator=lambda kw: Keyword(keyword=kw)) 
    # ... 

class KeywordPaper(db.Model): 
    # ... 
    keyword_id = db.Column(db.Integer, 
          db.ForeignKey('keywords.id'), 
          primary_key=True) 
    paper_id = db.Column(db.Integer, 
         db.ForeignKey('papers.id'), 
         primary_key=True) 
    keyword = db.relationship(Keyword, lazy='joined') 
    paper = db.relationship('Paper', 
          backref=db.backref("paper_keywords", 
               cascade="all, delete-orphan")) 
    # ... 

class Keyword(db.Model): 
    # ... 
    id = db.Column(db.Integer, primary_key=True) 
    keyword = db.Column(db.String(50)) 
    # ... 

模型視圖(APP/AUTH/model_views.py)

class MainModelView(ModelView): 
    # ... 
    form_base_class = SecureForm 
    # ... 

class PaperModelView(MainModelView): 
    page_size = 20 
    column_list = (
     # ... 
     'keywords', 
     # ... 
    ) 
    column_searchable_list = (
     # ... 
     'keywords', 
     # ... 
    ) 
    column_editable_list = (
     # ... 
     'keywords', 
     # ... 
    ) 
    form_ajax_refs = { 
     # ... keywords here? 
    } 
    # ... 

應用程序/ auth/__ init__.py

# ... 
auth = Blueprint('auth', __name__) 
from . import views 
auth.model_views = [] 
# ... 
paper_model_view = PaperModelView(Paper, db.session) 
auth.model_views += [paper_model_view] 
# ... 
from . import forms 
# ... 

應用/ __ init__.py

def create_app(config_name): 
    # ... 
    with app.app_context(): 
     # ... 
     # Initialize auth blueprint 
     from .auth import auth as auth_blueprint 
     app.register_blueprint(auth_blueprint) 
     # Add model vies to the admin console (again, with app context) 
     admin.add_views(*auth_blueprint.model_views) 

    return(app) 

當前結果

Association Proxy column is blank :(

回答

0

嘿任何人讀這...

使用關聯代理竟然用燒瓶管理員時,需要大量的工作無故。所以,我只是將關鍵字關係轉換爲正常的多對多關係。所以,我猜想問題解決了。

0

由於您使用一箇中間類KeywordPapercreator應該創建一個KeywordPaper例如,不是Keyword
嘗試類似Paper.keywords += ["keyword"]時,實際上會導致運行時錯誤。
所以,你想要的是:

creator=lambda kw: KeywordPaper(keyword=Keyword(keyword=kw)) 
+0

哦。正確的。謝謝你讓我知道。也許這也會解決顯示問題。 –

相關問題