flask wtf 的select报错Not a valid choice

parent_id = SelectField('parent_id', validators = [InputRequired()])

这句报错Not a valid choice

需要设置coerce = int

parent_id = SelectField('parent_id', coerce = int, validators = [InputRequired()])
class TaxonForm(FlaskForm):
  name = StringField('name', validators = [DataRequired('请输入名称')])
  parent_id = SelectField('parent_id', coerce = int, validators = [InputRequired()])
  sort = IntegerField('sort')

当我设置好后又报错

invalid literal for int() with base 10: ''

这是习惯使然,一般在做select是,习惯把第一值设置位空,单wtf比较死板,所需需要设置位数字

form.parent_id.choices.insert(0, ('', '请选择'))
form.parent_id.choices.insert(0, (-1, '请选择'))

也可以这样写

form.parent_id.choices = [(-1,'请选择'), (0, '顶级栏目')] + [(g.id, g.name) for g in find_taxons()]
'''
new
'''
@bp.route('/new')
def new():
  form = TaxonForm()
  form.parent_id.choices = [(g.id, g.name) for g in find_taxons()]
  form.parent_id.choices.insert(0, (-1, '请选择'))
  form.parent_id.choices.insert(1, (0, '顶级栏目'))
  
  return render_template('backend/taxon/create.html', form = form)

'''
create
'''
@bp.route('/create', methods = ('POST',))
def create():
  form = TaxonForm()
  form.parent_id.choices = [(g.id, g.name) for g in find_taxons()]
  form.parent_id.choices.insert(0, (-1, '请选择'))
  form.parent_id.choices.insert(1, (0, '顶级栏目'))

  if form.validate():
    name = request.form['name']
    parent_id = request.form['parent_id']
    sort = request.form['sort']
    print(name)

    # create taxon
    model = Taxon(name, parent_id, sort)
    db.session.add(model)
    db.session.commit()
    flash('提交成功')
    return redirect( url_for('taxon.index') )

  return render_template('backend/taxon/create.html', form = form)

猜你喜欢

转载自blog.csdn.net/tang05709/article/details/87905992