动态选择字段使用WTForms不更新 [英] Dynamic select field using WTForms not updating

查看:149
本文介绍了动态选择字段使用WTForms不更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用wtforms和sqlalchemy来创建动态选择字段,但是当从数据库插入或删除项目时,它不会更新。这里是我的代码:
$ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆