Skip to content

Instantly share code, notes, and snippets.

@ionatan-israel
Last active August 29, 2015 14:19
Show Gist options
  • Save ionatan-israel/bf21838fcb4b5b1cb8e4 to your computer and use it in GitHub Desktop.
Save ionatan-israel/bf21838fcb4b5b1cb8e4 to your computer and use it in GitHub Desktop.
Django, Pasando dinamicamente plantillas y formularios a una WizardView.
def get_form_list(request):
form_list = [
("categories", forms.CategoriesForm),
("description", forms.CategoriesForm)]
templates = {
"categories": "categories.html",
"description": "description.html"}
if not request.user.is_authenticated():
form_list.append(("register", forms.CategoriesForm))
templates["register"] = "step-register.html"
kwargs = {'templates': templates}
return MySessionWizardView.as_view(form_list=form_list, **kwargs)(request)
class MySessionWizardView(SessionWizardView):
templates = None
file_storage = FileSystemStorage(
location=os.path.join(settings.MEDIA_ROOT))
def get_template_names(self):
return [self.templates[self.steps.current]]
def get_form(self, step=None, data=None, files=None):
"""
cambiar la instancia de formulario dinamicamente
a partir de los datos que entramos en el paso anterior
'categories', 'description', 'register'
"""
if step is None:
step = self.steps.current
# prepare the kwargs for the form instance.
kwargs = self.get_form_kwargs(step)
kwargs.update({
'data': data,
'files': files,
'prefix': None, # self.get_form_prefix(step, self.form_list[step]),
'initial': None, # self.get_form_initial(step),
})
if step == 'categories':
form = forms.CategoriesForm
elif step == 'description':
kwargs.setdefault('instance', self.get_form_instance(step))
category = self.get_cleaned_data_for_step('categories')['category']
form = forms.DescriptionForm
else:
form = RegisterForm
return form(**kwargs)
def process_form_data(self, form_list):
form_data = [form.cleaned_data for form in form_list]
return form_data
def done(self, form_list, **kwargs):
form_data = self.process_form_data(form_list)
return render_to_response(
'done.html',
{'form_data': form_data},
context_instance=RequestContext(self.request))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment