Tam*_*mpa 8 python flask wtforms
我正在使用最新版本的flask,wtforms和Flask-WTForms.
我有一个显示表单的页面,其中一个是带有选项选项的选择框,名为"A".
当应用程序启动时,一切都很好.在另一种形式中,我添加了一个名为"B"的记录.
现在,我想要的表单应该有选项框和选项A和B bot只有选项A可用.我必须杀死uWSGI并重新启动以获取wtforms来刷新数据.
那么,我错过了什么?如何让wtforms刷新数据?
这是我如何创建表单,其中getAgencyList返回要添加到选择框的选项列表.在另一个对话框中,我添加了代理商,代理商列表应该更新,而无需重新启动应用:
class createUser(Form):
"""
Users are given a default password
"""
first_name = TextField()
last_name = TextField()
email = TextField('Email', [validators.Length(min=6, max=120), validators.Email()])
user_role = SelectField(u'User Role', choices=[('1', 'User'), ('2', 'Admin')])
org_role = SelectField(u'User Role', choices=[('1', 'Agency'), ('2', 'Advertiser'),('3', 'Admin')])
agency = SelectField(u'Agency', choices=getAgencyList())
Run Code Online (Sandbox Code Playgroud)
问题在于getAgencyList()对类的定义进行调用.因此,当时该函数返回的是它的数据.为了更新列表信息,您必须以某种方式getAgencyList在实例化期间运行.为了做到这一点,您可以使用一个非常明显的关于wtforms的事实,它允许您向特定字段添加选项.这里的文档只是查找标题为"选择具有动态选择值的字段"的子部分.这是一个应该有效的代码示例.
class CreateUserForm(Form):
first_name = TextField()
last_name = TextField()
email = TextField('Email',
[validators.Length(min=6, max=120), validators.Email()])
user_role = SelectField(u'User Role',
choices=[('1', 'User'), ('2', 'Admin')])
org_role = SelectField(u'User Role',
choices=[('1', 'Agency'), ('2', 'Advertiser'),('3', 'Admin')])
agency = SelectField(u'Agency')
@classmethod
def new(cls):
# Instantiate the form
form = cls()
# Update the choices for the agency field
form.agency.choices = getAgencyList()
return form
# So in order to use you do this ...
@app.route('/someendpoint')
def some_flask_endpoint():
# ... some code ...
form = CreateUserForm.new()
# That should give you a working CreateUserForm with updated values.
# ... some more code to validate form probably...
Run Code Online (Sandbox Code Playgroud)