2016-07-08 14 views
1

In meiner Website habe ich ein Modell Experiment, das viele Aktivitäten enthält. Ich habe eine Ansicht, in der Personen Aktivitäten aus einem Experiment hinzufügen oder entfernen können.Zwei Formen der gleichen Klasse auf einer Seite in Flaschen-Wtforms

Ich zeige eine Tabelle mit Aktivitäten, die Teil dieses Experiments sind, und eine Tabelle mit Aktivitäten, die nicht Teil dieses Experiments sind. Benutzer können prüfen, welche Aktivitäten sie hinzufügen oder entfernen möchten, und eine Übermittlungsschaltfläche unter der Tabelle verwenden.

Wenn ich jedoch die Liste der Auswahlmöglichkeiten in einem Formular aktualisiere, spiegelt dies die Liste der Auswahlmöglichkeiten auf dem anderen Formular wider. Mache ich etwas falsch?

Zum Hinzufügen und Entfernen der Aktivitäten zum/vom Experiment verwende ich das gleiche Formular.

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 

Hier ist meine Ansicht:

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) 

Obwohl remove_activities_form und add_activities_form haben ihre Optionen auf verschiedenen Listen separat eingestellt, sie beide eine Vereinigung ihrer beiden Optionslisten enthält, am Ende, die meine Vorlage vermasselt Rendern. Gibt es eine Möglichkeit, sie getrennt zu halten oder bin ich geschraubt?

Antwort