Source code for crudlfap.views.generic

"""
Crudlfa+ generic views and mixins.

Crudlfa+ takes views further than Django and are expected to:

- generate their URL definitions and reversions,
- check if a user has permission for an object,
- declare the names of the navigation menus they belong to.
"""
from django.conf import settings
from django.views import generic

from .. import mixins
from ..route import Route


if 'django.contrib.admin' in settings.INSTALLED_APPS:
    from django.contrib.admin.models import LogEntry
else:
    LogEntry = None


[docs]class View(mixins.LockMixin, mixins.MenuMixin, Route, generic.View): """Base view for CRUDLFA+."""
[docs]class TemplateView(mixins.TemplateMixin, View): """TemplateView for CRUDLFA+."""
[docs]class ModelView(mixins.ModelMixin, TemplateView): pass
[docs]class ObjectFormView(mixins.ObjectFormMixin, TemplateView): """Custom form view on an object."""
[docs]class ObjectView(mixins.ObjectMixin, TemplateView): pass
[docs]class ObjectsFormView(mixins.ObjectsFormMixin, TemplateView): pass
[docs]class ObjectsView(mixins.ObjectsMixin, TemplateView): pass
[docs]class FormView(mixins.FormMixin, TemplateView): """Base FormView class.""" style = 'warning' default_template_name = 'crudlfap/form.html'
[docs]class ModelFormView(mixins.ModelFormMixin, FormView): pass
[docs]class CreateView(mixins.CreateMixin, ModelFormView): """View to create a model object."""
[docs]class DeleteView(mixins.DeleteMixin, ObjectFormView): """View to delete an object."""
[docs]class DeleteObjectsView(mixins.DeleteMixin, ObjectsFormView): """Delete selected objects."""
[docs]class DetailView(mixins.DetailMixin, ObjectView): """Templated model object detail view which takes a field option."""
[docs]class HistoryView(mixins.ObjectMixin, generic.DetailView): pass
[docs]class ListView(mixins.ListMixin, mixins.SearchMixin, mixins.FilterMixin, mixins.TableMixin, mixins.ObjectsMixin, TemplateView): def get_object_list(self): if self.filterset: self.object_list = self.filterset.qs else: self.object_list = self.queryset if self.search_form: self.object_list = self.search_form.get_queryset() return self.object_list def get_listactions(self): return self.router.get_menu('list_action', self.request)
[docs]class UpdateView(mixins.UpdateMixin, ObjectFormView): """Model update view."""