mirror of
https://github.com/jazzband/django-admin2.git
synced 2026-04-09 17:31:06 +00:00
There's currently a lot of copy-pasting of breadcrumbs, this can be revisited once we have a better understanding of how we're going to handle navigation. I've also tried to make template context variables more logical and consistent throughout.
102 lines
3.2 KiB
Python
102 lines
3.2 KiB
Python
from django.core.urlresolvers import reverse
|
|
from django.http import HttpResponseRedirect
|
|
from django.views import generic
|
|
|
|
import extra_views
|
|
|
|
from .viewmixins import Admin2Mixin, AdminModel2Mixin, Admin2ModelFormMixin
|
|
|
|
|
|
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,
|
|
})
|
|
return data
|
|
|
|
|
|
class AppIndexView(Admin2Mixin, generic.TemplateView):
|
|
default_template_name = "app_index.html"
|
|
registry = None
|
|
apps = None
|
|
|
|
def get_context_data(self, **kwargs):
|
|
data = super(AppIndexView, self).get_context_data(**kwargs)
|
|
app_label = self.kwargs['app_label']
|
|
registry = self.apps[app_label]
|
|
|
|
data.update({
|
|
'app_label': app_label,
|
|
'registry': registry,
|
|
})
|
|
return data
|
|
|
|
|
|
class ModelListView(AdminModel2Mixin, generic.ListView):
|
|
default_template_name = "model_list.html"
|
|
permission_type = 'view'
|
|
|
|
def post(self, request):
|
|
# This is where we handle actions
|
|
action_name = request.POST['action']
|
|
action_func = self.get_actions()[action_name]['func']
|
|
selected_model_pks = request.POST.getlist('selected_model_pk')
|
|
queryset = self.model.objects.filter(pk__in=selected_model_pks)
|
|
response = action_func(request, queryset)
|
|
if response is None:
|
|
return HttpResponseRedirect(self.get_success_url())
|
|
else:
|
|
return response
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ModelListView, self).get_context_data(**kwargs)
|
|
context['model'] = self.get_model()
|
|
context['actions'] = self.get_actions().values()
|
|
return context
|
|
|
|
def get_success_url(self):
|
|
view_name = 'admin2:{}_{}_index'.format(self.app_label, self.model_name)
|
|
return reverse(view_name)
|
|
|
|
def get_actions(self):
|
|
return self.model_admin.get_actions()
|
|
|
|
|
|
class ModelDetailView(AdminModel2Mixin, generic.DetailView):
|
|
default_template_name = "model_detail.html"
|
|
permission_type = 'view'
|
|
|
|
|
|
class ModelEditFormView(AdminModel2Mixin, Admin2ModelFormMixin, extra_views.UpdateWithInlinesView):
|
|
form_class = None
|
|
default_template_name = "model_update_form.html"
|
|
permission_type = 'change'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ModelEditFormView, self).get_context_data(**kwargs)
|
|
context['model'] = self.get_model()
|
|
context['action'] = "Change"
|
|
return context
|
|
|
|
|
|
class ModelAddFormView(AdminModel2Mixin, Admin2ModelFormMixin, extra_views.CreateWithInlinesView):
|
|
form_class = None
|
|
default_template_name = "model_update_form.html"
|
|
permission_type = 'add'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ModelAddFormView, self).get_context_data(**kwargs)
|
|
context['model'] = self.get_model()
|
|
context['action'] = "Add"
|
|
return context
|
|
|
|
|
|
class ModelDeleteView(AdminModel2Mixin, generic.DeleteView):
|
|
success_url = "../../" # TODO - fix this!
|
|
default_template_name = "model_confirm_delete.html"
|
|
permission_type = 'delete'
|