2016-07-08 13 views
1

私のウェブサイトには、多くのアクティビティを含むモデル実験があります。私は、人々が実験からアクティビティを追加または削除できるビューを持っています。フラスコ重量の1ページに同じクラスの2つのフォーム

私は、この実験の一部であるアクティビティと、この実験の一部ではないアクティビティの表を示します。ユーザーは、追加または削除するアクティビティを確認し、テーブルの下にある送信ボタンを使用することができます。

しかし、あるフォームの選択肢のリストを更新すると、他のフォームの選択肢のリストにはこれが反映されます。私は何か間違っているのですか?

実験にアクティビティを追加したり削除したりする場合は、同じフォームを使用します。ここで

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_formadd_activities_formが異なるリストに別々に設定され、そのオプションが用意されていますが、どちらも私のテンプレートを台無しに彼らの2つのオプションリストの組合を含む終わりますレンダリング。それらを別々に保つ方法はありますか?上記の議論で

答えて

関連する問題