# -*- coding: utf-8 -*- from django.views.generic import TemplateView, CreateView, ListView, UpdateView, DetailView, FormView from django.views.generic.list import MultipleObjectMixin from django.conf import settings from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.core.urlresolvers import reverse from emencia.django.newsletter.models import Contact, ContactSettings, MailingList, Newsletter from emencia.django.newsletter.admin_forms import ContactSettingsForm, MailingListForm, NewsletterForm from ..forms import ContactFilterForm from functions.admin_views import paginate_results class ContactList(FormView): paginate_by = settings.ADMIN_PAGINATION model = Contact template_name = 'admin/newsletters/contact_list.html' form_class = ContactFilterForm queryset = Contact.objects.all() def get_form(self, form_class): if self.request.GET: return form_class(self.request.GET) else: return form_class(**self.get_form_kwargs()) def get(self, request, *args, **kwargs): if request.GET: form_class = self.get_form_class() form = self.get_form(form_class) if form.is_valid(): return self.form_valid(form) else: return self.form_invalid(form) else: return super(ContactList, self).get(request, *args, **kwargs) def form_valid(self, form): """ filtering queryset and return paginated results """ qs = form.filter() result = paginate_results(qs, page=self.request.GET.get('page')) context = self.get_context_data(form=form) context.update({'object_list': result}) return self.render_to_response(context) def get_context_data(self, **kwargs): context = super(ContactList, self).get_context_data(**kwargs) qs = self.model.objects.all() result = paginate_results(qs, page=self.request.GET.get('page')) context['object_list'] = result return context class UpdateContact(UpdateView): model = ContactSettings form_class = ContactSettingsForm template_name = 'admin/newsletters/contact.html' success_url = '/admin/newsletters/contact/all/' def get_initial(self): obj = self.object.contact data = self.initial.copy() data.update({'first_name': obj.first_name, 'subscriber': obj.subscriber, 'valid': obj.valid, 'tester': obj.tester}) return data class MailingListView(ListView): paginate_by = settings.ADMIN_PAGINATION model = MailingList template_name = 'admin/newsletters/mailing_list.html' class UpdateMailingList(UpdateView): model = MailingList form_class = MailingListForm template_name = 'admin/newsletters/mailing_list_object.html' success_url = '/admin/newsletters/mailinglist/all/' class CreateMailingList(CreateView): model = MailingList form_class = MailingListForm template_name = 'admin/newsletters/mailing_list_object.html' success_url = '/admin/newsletters/mailinglist/all/' class NewsletterCreate(CreateView): model = Newsletter form_class = NewsletterForm template_name = 'admin/newsletters/newsletter_object.html' success_url = '/admin/newsletters/newsletters/all/'