Skip to content

Instantly share code, notes, and snippets.

@mekhami
Last active February 27, 2016 18:59
Show Gist options
  • Select an option

  • Save mekhami/a7da125dc9ffb485bca4 to your computer and use it in GitHub Desktop.

Select an option

Save mekhami/a7da125dc9ffb485bca4 to your computer and use it in GitHub Desktop.
from django.shortcuts import render
from django.core.urlresolvers import reverse, reverse_lazy
from django.http import HttpResponseRedirect
from django.views.generic import View, TemplateView, FormView, UpdateView
from django.forms.formsets import formset_factory
from django.forms.models import modelformset_factory
from .models import Invitee, Extra
from .forms import RSVPForm, ExtraForm, InviteeForm
# Create your views here.
class IndexView(FormView):
form_class = RSVPForm
success_url = reverse_lazy('rsvp:confirm')
template_name = 'rsvp/index.html'
def form_valid(self, form):
self.request.session['code'] = form.cleaned_data['code']
return HttpResponseRedirect(self.get_success_url())
class ThanksView(TemplateView):
template_name = 'rsvp/thanks.html'
class ConfirmView(UpdateView):
template_name = 'rsvp/confirm.html'
success_url = reverse_lazy('rsvp:thanks')
form_class = InviteeForm
model = Invitee
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
extras = self.get_object().allowed_extras
ExtraFormSet = modelformset_factory(Extra, ExtraForm, extra=extras)
context['extras_form'] = formset_factory(ExtraForm, extra=extras)
return context
def get_object(self, queryset=None):
return Invitee.objects.get(code=self.request.session['code'])
def post(self, request, *args, **kwargs):
form = self.get_form()
self.object = self.get_object()
ExtraFormSet = modelformset_factory(Extra, ExtraForm, extra=self.object.allowed_extras)
extra_formset = ExtraFormSet(self.request.POST)
if form.is_valid() and extra_formset.is_valid():
extras = extra_formset.save(commit=False)
for extra in extras:
extra.invitee = self.object
extra.save()
return HttpResponseRedirect(reverse_lazy('rsvp:thanks'))
else:
return self.form_invalid(form)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment