Last active
February 27, 2016 18:59
-
-
Save mekhami/a7da125dc9ffb485bca4 to your computer and use it in GitHub Desktop.
This file contains hidden or 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.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