动态选择字段使用WTForms不更新 [英] Dynamic select field using WTForms not updating
问题描述
$ b $ pre $
class UserForm(Form):
username = StringField('Username',validators = [DataRequired ()])
password = PasswordField('Password',validators = [DataRequired()])
Job = SelectField(
'Job',
validators = [DataRequired() ],
choices = [(a.id,a.name)for a Job.query.order_by(Job.name)]
)
pre 和数据库模型:
$ p $ class Job(db。模型):
id = db.Column(db.Integer,primary_key = True,autoincrement = True)
name = db.Column(db.String)
def __init __( self,name):
self.name = name
$ b $ def __repr __(self):
return'< Job%s>'%self.name
它成功显示了select字段中的作业,但是如果修改表格,则不会更新,除非彻底重启应用程序。
class UserForm(Form):
username = StringField('Username',validators = [DataRequired()])
password = PasswordField('Password', (
'Job',
validators = [DataRequired()]
)
def __init__ (self,* args,** kwargs):
super(UserForm,self).__ init __(* args,** kwargs)
self.job.choices = [(a.id,a.name )for a Job.query.order_by(Job.name)]
或者在视图中:
form = UserForm()
form.job.choices = [(a.id,a.name)在Job.query.order_by(Job.name)]
I'm trying to make a dynamic select field using wtforms and sqlalchemy, but it doesn't update when an item is inserted or deleted from the database. Here's my code:
class UserForm(Form):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
job = SelectField(
'Job',
validators=[DataRequired()],
choices=[(a.id, a.name) for a in Job.query.order_by(Job.name)]
)
And the database model:
class Job(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String)
def __init__(self, name):
self.name = name
def __repr__(self):
return '<Job %s>' % self.name
It successfully shows the jobs in the select field, but if you modify the table, it doesn't update, except if you completely restart the application.
You should initialize the form choices when the form object is created:
class UserForm(Form):
username = StringField('Username', validators=[DataRequired()])
password = PasswordField('Password', validators=[DataRequired()])
job = SelectField(
'Job',
validators=[DataRequired()]
)
def __init__(self, *args, **kwargs):
super(UserForm, self).__init__(*args, **kwargs)
self.job.choices = [(a.id, a.name) for a in Job.query.order_by(Job.name)]
Or in the view:
form = UserForm()
form.job.choices = [(a.id, a.name) for a in Job.query.order_by(Job.name)]
这篇关于动态选择字段使用WTForms不更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!