paiji2_carpooling/views.py
from django.views import generic
from django.core.urlresolvers import reverse
from django.http import HttpResponseNotFound
from django.utils.translation import ugettext as _
from .forms import CarpoolForm
from paiji2_carpooling.models import (
Carpool,
)
from paiji2_utils.views import SuccessUrlMixin
class MySuccessUrl(SuccessUrlMixin):
default_url_name = 'carpool-list'
def get_forbidden_urls(self):
if hasattr(self, 'object'):
return (
reverse('carpool-edit', args=[self.object.pk]),
reverse('carpool-delete', args=[self.object.pk]),
)
else:
return None
class CarpoolOwnerMixin(object):
def dispatch(self, request, *args, **kwargs):
""" Making sure that only authors can update Carpools """
obj = self.get_object()
if obj.author != self.request.user:
return HttpResponseNotFound(
_('Rezo is not hacked. You don\'t have the permission xD')
)
return super(CarpoolOwnerMixin, self).dispatch(
request, *args, **kwargs
)
class CarpoolListView(generic.ListView):
model = Carpool
paginate_by = 10
context_object_name = 'covs'
template_name = 'carpooling/carpool/list.html'
def get_queryset(self):
return super(CarpoolListView, self).get_queryset().select_related(
'author'
)
class CarpoolCreateView(MySuccessUrl, generic.CreateView):
model = Carpool
form_class = CarpoolForm
template_name = 'carpooling/carpool/form.html'
message_succes = _('Your request has been saved successfully :P')
forbidden_url_names = (
'carpool-create',
)
def form_valid(self, form):
form.instance.author = self.request.user
return super(CarpoolCreateView, self).form_valid(form)
class CarpoolEditView(CarpoolOwnerMixin,
MySuccessUrl,
generic.UpdateView):
model = Carpool
form_class = CarpoolForm
template_name = 'carpooling/carpool/form.html'
message_success = _(
'Your carpool has been updated, it will be refreshed in a moment'
)
class CarpoolDeleteView(CarpoolOwnerMixin, MySuccessUrl, generic.DeleteView):
model = Carpool
template_name = 'carpooling/carpool/confirm_delete.html'
message_success = _(
'Your carpool has been removed, it will be refreshed in a moment'
)