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)