Flask 烧瓶WTF和字段名称

Flask 烧瓶WTF和字段名称,flask,flask-wtforms,Flask,Flask Wtforms,我想更改SubmitField的name属性(默认情况下为“submit”)。我试过什么: 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', _

我想更改
SubmitField
name
属性(默认情况下为“submit”)。我试过什么:

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
\u name
参数,所有工作正常。我发现
name
属性是通过
flask.ext.wtf.Form
传递的,但我不知道如何修复它


注意:我使用的是表单的非平凡导入:它是在运行时导入的,在视图的方法内部,而不是在文件的顶部。我不能也不会因为技术问题而改变它。也就是说,如果我在空闲状态下复制粘贴我的代码,它工作正常。但是,如果我在MethodView的
端口
方法中导入此代码,则会失败。

您是否考虑过使用自定义构造函数扩展SubmitField本身。看一个例子

基本上你会做一些类似的事情:

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

更改名称的最简单方法是更改字段的名称:

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')

您的示例更改控件的标签,而不是其名称。如果
标记,则Name是属性,而label是用户看到的内容。@AlexG.P.-你看过生成的输出了吗?HTML中输入的名称应该根据
表单
子类中属性的名称更改-这就是您可以这样做的方式:
类SomeForm(表单):firstname=TextField(“我的名字”)
而不是
类SomeForm(表单):firstname=TextField(“我的名字”,name=“firstname”)