You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

128 lines
4.5 KiB

# -*- 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'