2016-01-01 75 views
0

我開發了一個項目的大學的一個小應用程序,我需要的JSON編碼查詢的結果,將它傳遞給一個js庫,我讀過其他地方,我可以使用model_to_dict要實現這一點,但我得到這個錯誤瓶:Peewee model_to_dict助手不工作

AttributeError: 'SelectQuery' object has no attribute '_meta'

,我不知道爲什麼還是做什麼,沒有人知道如何解決呢?

我使用python 2.7和peewee

@app.route('/ormt') 
def orm(): 
    doitch = Player.select().join(Nationality).where(Nationality.nation % 'Germany') 
    return model_to_dict(doitch) 

回答

1

的最後一個版本。這是因爲doitch是一個SelectQuery例如,它是不是模型,你必須調用get()

from flask import jsonify 

@app.route('/ormt') 
def orm(): 
    doitch = Player.select().join(Nationality).where(Nationality.nation % 'Germany') 
    return jsonify(model_to_dict(doitch.get())) 

你也可以使用dicts方法來獲取數據字典。這省略了創建整個模型的東西。

from flask import jsonify 

@app.route('/ormt') 
def orm(): 
    doitch = Player.select().join(Nationality).where(Nationality.nation % 'Germany') 
    return jsonify(doitch.dicts().get()) 

編輯

正如@ lord63指出的那樣,你不能簡單地返回快譯通,它必須是一個瓶響應,以便將其轉換爲jsonify。

編輯2

@app.route('/ormt') 
def orm(): 
    doitch = Player.select().join(Nationality).where(Nationality.nation % 'Germany') 
    # another query 
    sth = Something.select() 
    return jsonify({ 
     'doitch': doitch.dicts().get(), 
     'something': sth_query.dicts().get() 
    }) 
+0

好吧,我做了什麼,你說的嘗試這兩種解決方案和最初的問題是固定的,但現在我得到一個**類型錯誤:「快譯通」對象不是可調用**錯誤;對此有何想法? XD – Vinz29

+1

@ Vinz29問題是你返回一個字典,但在這種情況下,燒瓶把它當作一個WSGI應用程序,並嘗試將其轉換成一個響應。爲了解決這個問題,你可以試試'jsonify(model_to_dict(doitch.get()))'。 –

+0

完美,現在一切正常,謝謝你們兩個:d 最後一兩件事,如果我想要的不僅僅是一個結果嗎?我試圖執行,但它不起作用 – Vinz29