def get_form(self, step=None, data=None, files=None): if step is None: step = self.steps.current if step == self.PARAMETROS_CRM: # se mantiene la mayor parte del código existente en el plug-in 'formtools # con la excepción de que se le pasa el argumento 'columnas_bd' para instanciar # con éxito el formulario correspondiente pues formtools no es lo suficientemente # flexible y sólo usa kwargs para instanciar campana = self.get_cleaned_data_for_step(self.INICIAL) bd_contacto = campana['bd_contacto'] columnas_bd = obtener_opciones_columnas_bd(bd_contacto, COLUMNAS_DB_DEFAULT) form_class = self.form_list[step] kwargs = self.get_form_kwargs(step) kwargs.update({ 'data': data, 'files': files, 'prefix': self.get_form_prefix(step, form_class), 'initial': self.get_form_initial(step), 'form_kwargs': { 'columnas_bd': columnas_bd }, }) if issubclass(form_class, (forms.ModelForm, forms.models.BaseInlineFormSet)): kwargs.setdefault('instance', self.get_form_instance(step)) elif issubclass(form_class, forms.models.BaseModelFormSet): kwargs.setdefault('queryset', self.get_form_instance(step)) return form_class(**kwargs) return super(CampanaWizardMixin, self).get_form(step, data, files)
def get_context_data(self, form, *args, **kwargs): context = super(CampanaTemplateCreateCampanaMixin, self).get_context_data(form=form, **kwargs) pk = self.kwargs.get('pk_campana_template', None) campana_template = get_object_or_404(Campana, pk=pk) current_step = self.steps.current if current_step == self.OPCIONES_CALIFICACION: opts_calif_init_formset = context['wizard']['form'] if not opts_calif_init_formset.is_bound: initial_data = campana_template.opciones_calificacion.values( 'nombre', 'tipo', 'formulario') form_kwargs = self.get_form_kwargs(current_step)['form_kwargs'] calif_init_formset = OpcionCalificacionFormSet( initial=initial_data, form_kwargs=form_kwargs) calif_init_formset.extra = len(initial_data) - 1 calif_init_formset.prefix = opts_calif_init_formset.prefix context['wizard']['form'] = calif_init_formset if current_step == self.PARAMETROS_CRM: params_crm_init_formset = context['wizard']['form'] if not params_crm_init_formset.is_bound: initial_data = campana_template.parametros_crm.values( 'tipo', 'valor', 'nombre') bd_contacto = campana_template.bd_contacto columnas_bd = obtener_opciones_columnas_bd( bd_contacto, COLUMNAS_DB_DEFAULT) param_crms_formset = ParametrosCrmFormSet( initial=initial_data, form_kwargs={'columnas_bd': columnas_bd}) param_crms_formset.extra = max(len(initial_data), 1) param_crms_formset.prefix = params_crm_init_formset.prefix context['wizard']['form'] = param_crms_formset return context