|
@@ -30,6 +30,7 @@ from django.contrib import messages
|
|
|
from django.core.exceptions import ValidationError
|
|
|
from django.core.urlresolvers import reverse, reverse_lazy
|
|
|
from django.db.models import Q
|
|
|
from django.db.models.deletion import Collector
|
|
|
from django.http import HttpResponse
|
|
|
from django.shortcuts import render_to_response, get_object_or_404
|
|
|
from django.views.generic import TemplateView, DetailView, CreateView, UpdateView, DeleteView, View
|
|
@@ -65,6 +66,43 @@ class RedirectToNextMixin(object):
|
|
|
return self.request.GET.get(self.next_parameter, super(RedirectToNextMixin, self).get_success_url())
|
|
|
|
|
|
|
|
|
class RelatedItemsMixin(object):
|
|
|
"""
|
|
|
View mixin that adds related items of a referenced model object to context
|
|
|
data in form of a nested list, including the reference model object as the
|
|
|
first element of a list.
|
|
|
|
|
|
The context data will be passed using the "related_items" key.
|
|
|
|
|
|
This data can be used in the template by passing it through the
|
|
|
unordered_list template tag.
|
|
|
|
|
|
The reference object is accessed via "object" property of calling view
|
|
|
(i.e. self.object).
|
|
|
|
|
|
For more details on implementation, see:
|
|
|
|
|
|
RelatedCollectorMixin.get_dependant_objects_representation method
|
|
|
"""
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
"""
|
|
|
Adds the related items of a reference model object to context data.
|
|
|
|
|
|
Returns:
|
|
|
Context data.
|
|
|
"""
|
|
|
|
|
|
# Set the context using the parent class.
|
|
|
context = super(RelatedItemsMixin, self).get_context_data(**kwargs)
|
|
|
|
|
|
# Add to context the nested list of string representations of related
|
|
|
# items.
|
|
|
context["related_items"] = self.object.get_dependant_objects_representation()
|
|
|
|
|
|
return context
|
|
|
|
|
|
|
|
|
class IndexView(MultiplePermissionsRequiredMixin, TemplateView):
|
|
|
"""
|
|
|
Custom view used for rendering the index page.
|
|
@@ -337,7 +375,7 @@ class ProjectUpdateView(RedirectToNextMi
|
|
|
return "Update project %s" % self.object.name
|
|
|
|
|
|
|
|
|
class ProjectDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
class ProjectDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
"""
|
|
|
View for deleting a project.
|
|
|
"""
|
|
@@ -421,7 +459,7 @@ class LocationUpdateView(RedirectToNextM
|
|
|
return "Update location %s" % self.object.name
|
|
|
|
|
|
|
|
|
class LocationDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
class LocationDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
"""
|
|
|
View for deleting a location.
|
|
|
"""
|
|
@@ -538,7 +576,7 @@ class EntityUpdateView(RedirectToNextMix
|
|
|
return "Update entity %s" % self.object.name
|
|
|
|
|
|
|
|
|
class EntityDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
class EntityDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
"""
|
|
|
View for deleting an entity.
|
|
|
"""
|
|
@@ -694,7 +732,7 @@ class InterfaceUpdateView(RedirectToNext
|
|
|
return "Update interface %s" % self.object.name
|
|
|
|
|
|
|
|
|
class InterfaceDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
class InterfaceDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
"""
|
|
|
View for deleting an interface.
|
|
|
"""
|
|
@@ -887,7 +925,7 @@ class CommunicationUpdateView(RedirectTo
|
|
|
return "Update communication %s" % self.object
|
|
|
|
|
|
|
|
|
class CommunicationDeleteView(RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
class CommunicationDeleteView(RelatedItemsMixin, RedirectToNextMixin, SetHeadlineMixin, MultiplePermissionsRequiredMixin, DeleteView):
|
|
|
"""
|
|
|
View for deleting an communication.
|
|
|
"""
|