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