Skip to content

Instantly share code, notes, and snippets.

@mekhami
Last active June 23, 2016 20:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mekhami/665889eb73fa64dedd6b41646181a3b0 to your computer and use it in GitHub Desktop.
Save mekhami/665889eb73fa64dedd6b41646181a3b0 to your computer and use it in GitHub Desktop.
from django.conf import settings
from django.core.urlresolvers import reverse_lazy
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.views import generic
from dal import autocomplete
from hashids import Hashids
from . import forms
from . import models
# Create your views here.
class AdbookIndex(generic.TemplateView):
template_name = 'cms/index.html'
class CampaignIndex(generic.ListView):
model = models.Campaign
template_name = 'campaigns/index.html'
class CampaignCreate(generic.CreateView):
model = models.Campaign
form_class = forms.CampaignForm
class CampaignDelete(generic.DeleteView):
model = models.Campaign
success_url = reverse_lazy('campaigns:campaign-index')
template_name = 'cms/confirm_delete.html'
class CampaignUpdate(generic.UpdateView):
model = models.Campaign
form_class = forms.CampaignForm
class CampaignDetail(generic.DetailView):
model = models.Campaign
class ProductTypeIndex(generic.ListView):
model = models.ProductType
template_name = 'product_types/product_type_index.html'
class ProductTypeCreate(generic.CreateView):
model = models.ProductType
form_class = forms.ProductTypeForm
template_name = 'product_types/product_type_create.html'
class ProductTypeDelete(generic.DeleteView):
model = models.ProductType
success_url = reverse_lazy('campaigns:product-type-index')
template_name = 'cms/confirm_delete.html'
class ProductTypeUpdate(generic.UpdateView):
model = models.ProductType
form_class = forms.ProductTypeForm
template_name = 'product_types/product_type_update.html'
class ProductTypeDetail(generic.DetailView):
model = models.ProductType
template_name = 'product_types/product_type_detail.html'
class OrderIndex(generic.ListView):
model = models.Order
template_name = 'orders/order_index.html'
class OrderCreate(generic.CreateView):
model = models.Order
template_name = 'orders/order_create.html'
form_class = forms.OrderForm
class OrderDetail(generic.DetailView):
model = models.Order
template_name = 'orders/order_detail.html'
class OrderUpdate(generic.UpdateView):
model = models.Order
form_class = forms.OrderForm
template_name = 'orders/order_update.html'
def get_context_data(self, **kwargs):
# Add the product formset to the context,
# bound if it's passed in as a kwarg, unbound if not
context = super().get_context_data(**kwargs)
if 'product_formset' not in kwargs:
context['products_set'] = forms.ProductFormSet(instance=self.object)
else:
context['products_set'] = kwargs['product_formset']
return context
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form()
product_formset = forms.ProductFormSet(self.request.POST, instance=self.object)
if all([form.is_valid() and product_formset.is_valid()]):
return self.form_valid(form, product_formset)
else:
return self.form_invalid(form, product_formset)
def form_valid(self, form, product_formset):
self.object = form.save()
product_formset.save()
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form, product_formset):
return self.render_to_response(
self.get_context_data(form=form, product_formset=product_formset)
)
class OrderDelete(generic.DeleteView):
model = models.Order
success_url = reverse_lazy('campaigns:order-index')
template_name = 'cms/confirm_delete.html'
class CustomerIndex(generic.ListView):
model = models.Customer
template_name = 'customers/customer_index.html'
class CustomerCreate(generic.CreateView):
model = models.Customer
template_name = 'customers/customer_create.html'
form_class = forms.CustomerForm
class CustomerDelete(generic.DeleteView):
model = models.Customer
success_url = reverse_lazy('campaigns:customer-index')
template_name = 'cms/confirm_delete.html'
class CustomerUpdate(generic.UpdateView):
model = models.Customer
template_name = 'customers/customer_update.html'
form_class = forms.CustomerForm
class CustomerDetail(generic.DetailView):
model = models.Customer
template_name = 'customers/customer_detail.html'
class OrderConfirm(generic.UpdateView):
template_name = 'orders/confirm.html'
form_class = forms.PaymentForm
success_url = '/thanks'
model = models.Order
def get_object(self, queryset=None):
hashids = Hashids(salt=settings.SECRET_KEY, min_length=8)
try:
return models.Order.objects.get(id=hashids.decode(self.kwargs.get('hash'))[0])
except IndexError:
return None
def form_valid(self, form):
print('saving customer information')
self.object.paid = True
self.object.customer.phone_number = form.cleaned_data['phone_number']
self.object.customer.email = form.cleaned_data['email']
self.object.save()
print('customer information saved')
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
return reverse_lazy('campaigns:thanks', kwargs={'hash': self.object.public_url_hash})
class CustomerAutocomplete(autocomplete.Select2QuerySetView):
def get_queryset(self):
if not self.request.user.is_authenticated():
return models.Customer.objects.none()
qs = models.Customer.objects.all()
if self.q:
qs = qs.filter(name__istartswith=self.q)
return qs
class ThanksView(generic.DetailView):
template_name = 'campaigns/thanks.html'
model = models.Order
def get_object(self, queryset=None):
hashids = Hashids(salt=settings.SECRET_KEY, min_length=8)
try:
return models.Order.objects.get(id=hashids.decode(self.kwargs.get('hash'))[0])
except IndexError:
return None
@audiolion
Copy link

def get_object(self, queryset=None):
        try:
            return Agenda.objects.get(start__year=self.kwargs.get('year'),
                                      start__month=self.kwargs.get('month'),
                                      start__day=self.kwargs.get('day'))
        except IndexError:
            return None

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment