def get_form(self, form): form = super(BaseBmoCommandMixin, self).get_form(form) if self.request.method == 'POST': self.listener_formset = ListenerFormSet(self.request.POST) else: qs = self.object.listener_set.all() if self.object else Listener.objects.none() self.listener_formset = ListenerFormSet(queryset=qs) self.listener_formset.data.update(self.request.GET) if self.object: for f in self.listener_formset.forms: qs = f.fields['trigger_command'].queryset f.fields['trigger_command'].queryset = qs.exclude(id=self.object.id) return form
class BaseBmoCommandMixin(object): form_class = BmoCommandForm model = BmoCommand success_url = reverse_lazy('bmo_command_list') def get_form(self, form): form = super(BaseBmoCommandMixin, self).get_form(form) if self.request.method == 'POST': self.listener_formset = ListenerFormSet(self.request.POST) else: qs = self.object.listener_set.all() if self.object else Listener.objects.none() self.listener_formset = ListenerFormSet(queryset=qs) self.listener_formset.data.update(self.request.GET) if self.object: for f in self.listener_formset.forms: qs = f.fields['trigger_command'].queryset f.fields['trigger_command'].queryset = qs.exclude(id=self.object.id) return form def get_context_data(self, **kwargs): context_data = super(BaseBmoCommandMixin, self).get_context_data(**kwargs) context_data['listener_formset'] = self.listener_formset return context_data def form_valid(self, form): if self.listener_formset.is_valid(): self.object = form.save() for f in self.listener_formset.forms: listener = f.save(commit=False) listener.command = self.object try: listener.save() except ValidationError: pass return super(BaseBmoCommandMixin, self).form_valid(form)