我尝试使用multiselectfield来使用flask从左到右移动数据。我可以很容易地从左到右显示和移动数据,但是当我提交表单时,我错误地说字段没有有效的选项。在
我是不是做得很好?还有别的办法吗?在
这是我的代码:
在表单.py公司名称:
class MigrateUsersForm(FlaskForm):
multiselect = SelectMultipleField("Utilisateurs des anciennes campagne")
multiselect_to = SelectMultipleField("Utilisateurs de la campagne en cours")
submit = SubmitField('Valider')
def __init__(self, *args, **kwargs):
super(MigrateUsersForm, self).__init__(*args, **kwargs)
self.multiselect.choices = [(s.id, s.nom_agent+" "+s.prenoms_agent) for s in (User.query.filter(User.id!=current_user.id, User.id.in_(db.session.query(Users_Campagne.users_id).join(Campagnes).filter(Users_Campagne.campagne_id==Campagnes.campagne_id, Campagnes.isActive==0))).order_by(User.nom_agent).all())]
self.multiselect_to.choices = [(s.id, s.nom_agent+" "+s.prenoms_agent) for s in (User.query.filter(User.id!=current_user.id, User.id.in_(db.session.query(Users_Campagne.users_id).join(Campagnes).filter(Users_Campagne.campagne_id==Campagnes.campagne_id, Campagnes.isActive==1))).order_by(User.nom_agent).all())]
在模板.html公司名称:
^{pr2}$在视图.py在
@login_required
def migrate_users():
form = MigrateUsersForm()
if request.method == "POST" and form.validate_on_submit():
print("Here am i")
'''multiselect = ', '.join(form.multiselect.data)
multiselect_to = ', '.join(form.multiselect_to.data)
print(multiselect)
print(multiselect_to)'''
return render_template('admin/migrate_users.html', form=form)
当我点击validate时,这是我面对的错误 Error I face
我已经用固定的值列表替换了},并且可以在提交的
self.multiselect.choices
和{POST
请求中获得选定的多个值。在目录结构:
^{pr2}$multi_select_app.py
:multi_select_form.py
:templates\multi_select.html
:{(已安装软件包):
运行应用程序:
输出:
多选输入表单(缺少CSS文件,样式已损坏):
单击“提交”按钮后提交的值:
如您所见,在表单提交之后,我们将获得正确的多个选定值。 请检查}格式的}值。在
self.multiselect.choices
和{__init__
方法中的self.multiselect.choices
和{更新: 我认为
s.id
是一个整数字段。当您提交表单时,它将被视为一个字符串字段。在SelectMultipleField
中设置coerce=int
。 同时更换:multiselect = SelectMultipleField("Utilisateurs des anciennes campagne")
带multiselect = SelectMultipleField("Utilisateurs des anciennes campagne", coerce=int)
multiselect_to = SelectMultipleField("Utilisateurs de la campagne en cours")
带multiselect_to = SelectMultipleField("Utilisateurs de la campagne en cours", coerce=int)
参考: -SelectMultipleField Documentation
相关问题 更多 >
编程相关推荐