mirror of
https://github.com/jazzband/django-admin2.git
synced 2026-03-17 06:30:25 +00:00
144 lines
4.8 KiB
Python
144 lines
4.8 KiB
Python
import os
|
|
|
|
from django.core.urlresolvers import reverse
|
|
from django.conf import settings
|
|
from django.contrib.auth.views import redirect_to_login
|
|
from django.core.exceptions import PermissionDenied
|
|
from django.forms.models import modelform_factory
|
|
from django.views import generic
|
|
|
|
from braces.views import AccessMixin
|
|
|
|
from templatetags.admin2_urls import admin2_urlname
|
|
|
|
|
|
ADMIN2_THEME_DIRECTORY = getattr(settings, "ADMIN2_THEME_DIRECTORY", "admin2/bootstrap")
|
|
|
|
|
|
class Admin2Mixin(object):
|
|
model_admin = None
|
|
model_name = None
|
|
app_label = None
|
|
|
|
def get_template_names(self):
|
|
return [os.path.join(ADMIN2_THEME_DIRECTORY, self.default_template_name)]
|
|
|
|
def get_model(self):
|
|
return self.model
|
|
|
|
def get_queryset(self):
|
|
return self.get_model()._default_manager.all()
|
|
|
|
def get_form_class(self):
|
|
if self.form_class is not None:
|
|
return self.form_class
|
|
return modelform_factory(self.get_model())
|
|
|
|
|
|
class AdminModel2Mixin(Admin2Mixin, AccessMixin):
|
|
model_admin = None
|
|
# Permission type to check for when a request is sent to this view.
|
|
permission_type = None
|
|
|
|
def dispatch(self, request, *args, **kwargs):
|
|
# Check if user has necessary permissions. If the permission_type isn't specified then check for staff status.
|
|
has_permission = self.model_admin.has_permission(request, self.permission_type) \
|
|
if self.permission_type else request.user.is_staff
|
|
# Raise exception or redirect to login if user doesn't have permissions.
|
|
if not has_permission:
|
|
if self.raise_exception:
|
|
raise PermissionDenied # return a forbidden response
|
|
else:
|
|
return redirect_to_login(request.get_full_path(),
|
|
self.get_login_url(), self.get_redirect_field_name())
|
|
|
|
return super(AdminModel2Mixin, self).dispatch(request, *args, **kwargs)
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(AdminModel2Mixin, self).get_context_data(**kwargs)
|
|
context.update({
|
|
'has_add_permission': self.model_admin.has_add_permission(self.request),
|
|
'has_edit_permission': self.model_admin.has_edit_permission(self.request),
|
|
'has_delete_permission': self.model_admin.has_delete_permission(self.request),
|
|
'model': self.get_model()._meta.verbose_name,
|
|
'model_pluralized': self.get_model()._meta.verbose_name_plural
|
|
})
|
|
return context
|
|
|
|
def get_model(self):
|
|
return self.model
|
|
|
|
def get_queryset(self):
|
|
return self.get_model()._default_manager.all()
|
|
|
|
def get_form_class(self):
|
|
if self.form_class is not None:
|
|
return self.form_class
|
|
return modelform_factory(self.get_model())
|
|
|
|
|
|
class Admin2ModelFormMixin(object):
|
|
|
|
def get_success_url(self):
|
|
if '_continue' in self.request.POST:
|
|
view_name = admin2_urlname(self, 'update')
|
|
return reverse(view_name, kwargs={'pk': self.object.pk})
|
|
|
|
if '_addanother' in self.request.POST:
|
|
return reverse(admin2_urlname(self, 'create'))
|
|
|
|
# default to index view
|
|
return reverse(admin2_urlname(self, 'index'))
|
|
|
|
|
|
class IndexView(Admin2Mixin, generic.TemplateView):
|
|
default_template_name = "index.html"
|
|
registry = None
|
|
apps = None
|
|
|
|
def get_context_data(self, **kwargs):
|
|
data = super(IndexView, self).get_context_data(**kwargs)
|
|
data.update({
|
|
'apps': self.apps,
|
|
'registry': self.registry,
|
|
})
|
|
return data
|
|
|
|
|
|
class ModelListView(Admin2Mixin, generic.ListView):
|
|
default_template_name = "model_list.html"
|
|
permission_type = 'view'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ModelListView, self).get_context_data(**kwargs)
|
|
context['model'] = self.get_model()._meta.verbose_name
|
|
context['model_pluralized'] = self.get_model()._meta.verbose_name_plural
|
|
return context
|
|
|
|
|
|
class ModelDetailView(AdminModel2Mixin, generic.DetailView):
|
|
default_template_name = "model_detail.html"
|
|
permission_type = 'view'
|
|
|
|
|
|
class ModelEditFormView(AdminModel2Mixin, Admin2ModelFormMixin, generic.UpdateView):
|
|
form_class = None
|
|
default_template_name = "model_edit_form.html"
|
|
permission_type = 'change'
|
|
|
|
|
|
class ModelAddFormView(AdminModel2Mixin, Admin2ModelFormMixin, generic.CreateView):
|
|
form_class = None
|
|
default_template_name = "model_add_form.html"
|
|
permission_type = 'add'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ModelAddFormView, self).get_context_data(**kwargs)
|
|
context['model'] = self.get_model()._meta.verbose_name
|
|
return context
|
|
|
|
|
|
class ModelDeleteView(AdminModel2Mixin, generic.DeleteView):
|
|
success_url = "../../"
|
|
default_template_name = "model_confirm_delete.html"
|
|
permission_type = 'delete'
|