2014-02-15 48 views
0

我有這樣的代碼:如何訪問QuerySelectField另一場在初始化傳遞表單域數據

route.py

@app.route('/task/<param_userid>', methods=['GET', 'POST']) 
def task_new(param_userid=None): 
    ... 
    obj_task_new = {'user_id': param_userid} 
    form = FormTask(**obj_task_new) 
    ... 

forms.py

class FormTask(Form): 
    user_id = fields.TextField('UID',validators=[validators.required()]) 
    group = QuerySelectField(query_factory=lambda: db.session.query([MODEL]).filter_by(user_id_field=[USER_ID]), allow_blank=False) 
    ... 

其中[MODEL]db.M奧德爾類(不認爲這是與此有關)


我需要的是[USER_ID]值動態地從USER_ID這我通過obj_task_newroute.py發送傳遞


我也試圖與

QuerySelectField(query_factory=CustomFunction,... 

但我發現沒有辦法將參數傳遞給它,即使我確實找到了一種方法來傳遞參數,訪問user_id值的問題仍然存在。

謝謝

回答

0

你有兩個選擇:

  1. 你可以在你的控制器在運行時設置的現場查詢:

    form = FormTask(**obj_task_new) 
    form.group.query = db.session.query([MODEL]).filter_by(user_id_field=[param_userid]), allow_blank=False) 
    
  2. 你可以利用request是一個線程本地和使用您的自定義函數中的事實:

    def for_current_user(): 
        user_id = request.view_args.get('param_userid') 
        return db.session.query([MODEL]).filter_by(...) 
    
    # And then in your form definition 
    QuerySelectField(query_factory=for_current_user) 
    
+0

非常感謝你,這兩個選項的工作。 我對這個請求有同樣的想法,但我想我沒有正確實施它(如果我這樣做了,它會節省我長時間的搜索......) – Marius