关于《Python项目开发案例集锦》第17章后台商品添加/编辑功能页面子类下拉框提示“Not a valid choice”
发表在Python图书答疑
2019-10-31
是否精华
是
否
版块置顶:
是
否
问题页面:后台——商品添加/编辑功能页面;
发现问题:提交表单失败,子类下拉框提示“Not a valid choice”信息;
问题追踪:FlaskForm对于SelectField验证失败;
问题原因:表单提交的子类数据不存在于后台方法所定义的子类列表的数据中;
因此要对定义子类数据列表的代码进行修改;
原代码:
#路径:admin/views.py def goods_add(): ... form.subcat_id.choices = [(v.id, v.cat_name) for v in SubCat.query.filter_by(super_cat_id=supercat_list[0][0]).all()] # 为super_cat_id添加属性 ... def goods_edit(id=None): ... form.subcat_id.choices = [(v.id, v.cat_name) for v in SubCat.query.filter_by(super_cat_id=goods.supercat_id).all()] # 为super_cat_id添加属性 ...
修正代码:
#路径:admin/views.py def goods_add(): ... if form.data['supercat_id']: form.subcat_id.choices=[(v.id,v.cat_name) for v in SubCat.query.filter_by(super_cat_id=int(form.data["supercat_id"])).all()] else: form.subcat_id.choices=[(v.id,v.cat_name) for v in SubCat.query.filter_by(super_cat_id=supercat_list[0][0]).all()] ... def goods_edit(id=None): ... if form.data['supercat_id']: form.subcat_id.choices=[(v.id,v.cat_name) for v in SubCat.query.filter_by(super_cat_id=int(form.data['supercat_id'])).all()] else: form.subcat_id.choices=[(v.id,v.cat_name) for v in SubCat.query.filter_by(super_cat_id=goods.supercat_id).all()] # 为super_cat_id添加属性 ...