flask-wtforms 中一页上的两种形式相同 class
Two forms of same class on one page in flask-wtforms
在我的网站上,我有一个包含许多活动的模型实验。我有一个视图,人们可以在其中添加或删除实验中的活动。
我展示了一个 table 活动,它是这个实验的一部分,还有一个 table 活动不是这个实验的一部分。用户可以检查他们想要添加或删除哪些活动,并使用 table.
下的提交按钮
但是,当我更新一个表单上的选项列表时,另一个表单上的选项列表反映了这一点。我做错了什么吗?
对于添加和删除活动 to/from 实验,我使用相同的表格。
class MultiCheckboxField(SelectMultipleField):
widget = ListWidget(prefix_label=False)
option_widget = CheckboxInput()
class ActivityListForm(Form):
activities = MultiCheckboxField(validators=[DataRequired()], choices=[])
submit = SubmitField("Submit")
def populate_activities(self, activities_set):
activities_mapping = {}
for activity in activities_set:
activities_mapping[str(activity.id)] = activity
choice_tuple = (str(activity.id), activity.question)
self.activities.choices.append(choice_tuple)
return activities_mapping
这是我的观点:
def settings_experiment(exp_id):
experiment = Experiment.query.get(exp_id)
remove_activities_form = ActivityListForm(prefix="remove")
add_activities_form = ActivityListForm(prefix="add")
remove_activities_mapping = remove_activities_form.populate_activities(
experiment.activities)
add_activities_mapping = add_activities_form.populate_activities(
Activity.query.\
filter(not_(Activity.experiments.any(id=experiment.id))).all())
return render_template("experiments/settings_experiment.html",
experiment=experiment,
update_experiment_form=update_experiment_form,
remove_activities_form=remove_activities_form,
add_activities_form=add_activities_form,
add_activities_mapping=add_activities_mapping,
remove_activities_mapping=remove_activities_mapping)
虽然 remove_activities_form
和 add_activities_form
将它们的选项分别设置为不同的列表,但它们最终都包含了两个选项列表的并集,这打乱了我的模板渲染。有没有办法让它们分开,还是我搞砸了?
https://github.com/wtforms/wtforms/issues/284
上述讨论中的解决方案。
在我的网站上,我有一个包含许多活动的模型实验。我有一个视图,人们可以在其中添加或删除实验中的活动。
我展示了一个 table 活动,它是这个实验的一部分,还有一个 table 活动不是这个实验的一部分。用户可以检查他们想要添加或删除哪些活动,并使用 table.
下的提交按钮但是,当我更新一个表单上的选项列表时,另一个表单上的选项列表反映了这一点。我做错了什么吗?
对于添加和删除活动 to/from 实验,我使用相同的表格。
class MultiCheckboxField(SelectMultipleField):
widget = ListWidget(prefix_label=False)
option_widget = CheckboxInput()
class ActivityListForm(Form):
activities = MultiCheckboxField(validators=[DataRequired()], choices=[])
submit = SubmitField("Submit")
def populate_activities(self, activities_set):
activities_mapping = {}
for activity in activities_set:
activities_mapping[str(activity.id)] = activity
choice_tuple = (str(activity.id), activity.question)
self.activities.choices.append(choice_tuple)
return activities_mapping
这是我的观点:
def settings_experiment(exp_id):
experiment = Experiment.query.get(exp_id)
remove_activities_form = ActivityListForm(prefix="remove")
add_activities_form = ActivityListForm(prefix="add")
remove_activities_mapping = remove_activities_form.populate_activities(
experiment.activities)
add_activities_mapping = add_activities_form.populate_activities(
Activity.query.\
filter(not_(Activity.experiments.any(id=experiment.id))).all())
return render_template("experiments/settings_experiment.html",
experiment=experiment,
update_experiment_form=update_experiment_form,
remove_activities_form=remove_activities_form,
add_activities_form=add_activities_form,
add_activities_mapping=add_activities_mapping,
remove_activities_mapping=remove_activities_mapping)
虽然 remove_activities_form
和 add_activities_form
将它们的选项分别设置为不同的列表,但它们最终都包含了两个选项列表的并集,这打乱了我的模板渲染。有没有办法让它们分开,还是我搞砸了?
https://github.com/wtforms/wtforms/issues/284
上述讨论中的解决方案。