Created
October 24, 2013 03:56
-
-
Save chriskief/7131097 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.views.generic import UpdateView | |
from django.shortcuts import get_object_or_404 | |
from django.core.urlresolvers import reverse_lazy | |
from app.models import Model | |
from app.forms import Form1, Form2 | |
class MyView(UpdateView): | |
template_name = 'template.html' | |
form_class = Form1 | |
second_form_class = Form2 | |
success_url = reverse_lazy('success') | |
def get_context_data(self, **kwargs): | |
context = super(MyView, self).get_context_data(**kwargs) | |
if 'form' not in context: | |
context['form'] = self.form_class(initial={'some_field': context['model'].some_field}) | |
if 'form2' not in context: | |
context['form2'] = self.second_form_class(initial={'another_field': context['model'].another_field}) | |
return context | |
def get_object(self): | |
return get_object_or_404(Model, pk=self.request.session['someval']) | |
def form_invalid(self, **kwargs): | |
return self.render_to_response(self.get_context_data(**kwargs)) | |
def post(self, request, *args, **kwargs): | |
# get the user instance | |
self.object = self.get_object() | |
# determine which form is being submitted | |
# uses the name of the form's submit button | |
if 'form' in request.POST: | |
# get the primary form | |
form_class = self.get_form_class() | |
form_name = 'form' | |
else: | |
# get the secondary form | |
form_class = self.second_form_class | |
form_name = 'form2' | |
# get the form | |
form = self.get_form(form_class) | |
# validate | |
if form.is_valid(): | |
return self.form_valid(form) | |
else: | |
return self.form_invalid(**{form_name: form}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
What if you wanted to have multiple forms where they simply render on an HTML form and they all submit to one URL ?