2013-10-25 153 views
3

我想要更改name attribure of SubmitField(默認爲「提交」)。我曾嘗試過什麼:Flask-WTF和字段名稱

from flask.ext.wtf import Form, SubmitField 

class BaseForm(Form): 
    submit = SubmitField('Create', id='submit_button', name='submit_button') #1 
    submit = SubmitField('Create', id='submit_button', _name='submit_button') #2 

    def __init__(self, edit=None, *args, **kwargs): 
     self.submit.kwargs['name'] = 'submit_button' #5 
     self.submit.kwargs['_name'] = 'submit_button' #6 

所有這些都失敗,出現不同的錯誤。如果我刪除name_name參數所有工作正常。我發現name屬性通過flask.ext.wtf.Form傳遞,但我沒有任何意義如何解決它。

注意:我使用的不是平凡的導入我的表單:它是在視圖的方法內運行時導入,而不是在文件的頂部。由於技術問題,我不能也不會改變它。即如果我在IDLE中複製粘貼我的代碼,它工作正常。但是,如果我在MethodView的port方法內導入此代碼,它將失敗。

回答

2

您是否看過使用自定義構造函數來擴展SubmitField本身。看一個例子here

基本上,你會做這樣的事情:

class CustomSubmitField(SubmitField): 
    def __init__(self, label='', validators=None,_name='',**kwargs): 
     super(SubmitField, self).__init__(label, validators, **kwargs) 
     custom_name = "whatever" 
     self._name = custom_name 
+0

看來你的解決方案只有工作。 –

2

改名字最簡單的方法是改變字段的名稱:

class BaseForm(Form): 
    # This one's name will be submit_button 
    submit_button = SubmitField('Create') 
    # This one's name will be another_button 
    another_button = SubmitField('Do Stuff') 
+0

您的示例更改了控件的「標籤」,而不是其名稱。如果''標籤的名字是屬性,標籤是用戶看到的。 –

+0

@ AlexG.P。 - 你看過生成的輸出嗎? HTML中輸入的名字應該根據'Form'子類中屬性的名稱來改變 - 這就是你可以這樣做的方法:'SomeForm(Form):firstname = TextField(「My Name」)'比''SomeForm(Form):firstname = TextField(「My Name」,name _ =「firstname」)''。 –