# -*- coding: utf-8 -*- from django.views.generic import TemplateView, CreateView, ListView, UpdateView, DetailView from django.conf import settings from django.http import HttpResponseRedirect from django.forms.formsets import BaseFormSet, formset_factory from django.shortcuts import get_object_or_404 from django.core.urlresolvers import reverse from emencia.django.newsletter.models import Contact, ContactSettings, MailingList, Newsletter, Attachment from emencia.django.newsletter.admin_forms import ContactSettingsForm, MailingListForm, NewsletterForm, AttachmentForm class ContactList(ListView): paginate_by = settings.ADMIN_PAGINATION model = Contact template_name = 'admin/newsletters/contact_list.html' 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/' from django.forms.models import modelformset_factory class NewsletterCreate(CreateView): model = Newsletter form_class = NewsletterForm template_name = 'admin/newsletters/newsletter_object.html' success_url = '/admin/newsletters/newsletters/all/' def get_formset(self): #if self.request.POST: # AttachmentFormSet = formset_factory(Attachment) #else: AttachmentFormSet = formset_factory(AttachmentForm) if self.request.POST: return AttachmentFormSet(self.request.POST, self.request.FILES) else: return AttachmentFormSet() def get_context_data(self, **kwargs): context = super(NewsletterCreate, self).get_context_data(**kwargs) context['attachment_formset'] = self.get_formset() return context def form_valid(self, form): self.object = form.save() formset = self.get_formset() if formset.is_valid(): for item in formset.forms: if item.is_valid() and item.has_changed(): instance = item.save(commit=False) instance.newsletter = self.object instance.save() return HttpResponseRedirect(self.success_url) class NewsletterUpdate(UpdateView): model = Newsletter form_class = NewsletterForm template_name = 'admin/newsletters/newsletter_object.html' success_url = '/admin/newsletters/newsletters/all/' def get_formset(self): if self.request.POST: AttachmentFormSet = modelformset_factory(Attachment, form=AttachmentForm, exclude=('newsletter',)) else: AttachmentFormSet = modelformset_factory(Attachment, form=AttachmentForm, exclude=('newsletter',)) if self.request.POST: return AttachmentFormSet(self.request.POST, self.request.FILES, queryset=self.object.attachment_set.all()) else: return AttachmentFormSet(queryset=self.object.attachment_set.all()) def get_context_data(self, **kwargs): context = super(NewsletterUpdate, self).get_context_data(**kwargs) context['attachment_formset'] = self.get_formset() return context def form_valid(self, form): self.object = form.save() formset = self.get_formset() if formset.is_valid(): for item in formset.forms: if item.is_valid() and item.has_changed(): instance = item.save(commit=False) instance.newsletter = self.object instance.save() return HttpResponseRedirect(self.success_url) class NewsletterListView(ListView): paginate_by = settings.ADMIN_PAGINATION model = Newsletter template_name = 'admin/newsletters/newsletter_list.html'