dev-coop/meancoach

View on GitHub
meancoach_project/apps/metrics/views/metric.py

Summary

Maintainability
A
0 mins
Test Coverage
from django.core.urlresolvers import reverse
from django.shortcuts import Http404, HttpResponseRedirect
from django.views.generic import CreateView, UpdateView, DeleteView, \
    ListView

from django_tables2 import SingleTableMixin

from core.views import LoginRequiredMixin
from ..forms import MetricForm
from ..models import Metric
from ..tables import MetricTable


class MetricViewMixin(object):
    '''This is a helper mixin providing generic support for all of the
    Metric views'''
    model = Metric
    form_class = MetricForm

    def get_object(self, queryset=None):
        obj = super(MetricViewMixin, self).get_object()
        if not obj.creator == self.request.user:
            raise Http404
        return obj

    def get_success_url(self):
        return self.success_url or reverse("metrics:list")


class MetricListView(MetricViewMixin, LoginRequiredMixin, SingleTableMixin, ListView):
    template_name = "metric/list.html"
    table_class = MetricTable


class MetricDeleteView(MetricViewMixin, LoginRequiredMixin, DeleteView):
    template_name = 'metric/confirm_delete.html'


class MetricFormMixin(object):

    def check_save_add_another(self, form):
        '''Check if someone clicked "save and add another" and redirect
        when they do'''
        if '_save_and_add_another' in form.data:
            self.success_url = reverse("metrics:create")

        return HttpResponseRedirect(self.get_success_url())


class MetricCreateView(MetricViewMixin, MetricFormMixin, LoginRequiredMixin, CreateView):
    template_name = "metric/form.html"

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.creator = self.request.user
        self.object.save()
        return self.check_save_add_another(form)


class MetricUpdateView(MetricViewMixin, MetricFormMixin, LoginRequiredMixin, UpdateView):
    template_name = "metric/form.html"

    def form_valid(self, form):
        return self.check_save_add_another(form)