|
from functools import update_wrapper |
|
from django.contrib import admin |
|
from django.contrib.admin import ModelAdmin |
|
from django.contrib.admin.templatetags.admin_urls import add_preserved_filters |
|
from django.core.exceptions import PermissionDenied |
|
from django.shortcuts import render |
|
|
|
from myapp.models import Widget |
|
from myapp.forms import ManageWidgetForm |
|
|
|
|
|
class WidgetAdmin(ModelAdmin): |
|
change_form_template = 'myapp/change_form.html' |
|
manage_view_template = 'myapp/manage_view.html' |
|
|
|
def get_urls(self): |
|
from django.conf.urls import patterns, url |
|
|
|
def wrap(view): |
|
def wrapper(*args, **kwargs): |
|
return self.admin_site.admin_view(view)(*args, **kwargs) |
|
return update_wrapper(wrapper, view) |
|
|
|
info = self.model._meta.app_label, self.model._meta.model_name |
|
|
|
urls = patterns('', |
|
url(r'^(.+)/manage/$', |
|
wrap(self.manage_view), |
|
name='%s_%s_manage' % info), |
|
) |
|
|
|
super_urls = super(WidgetAdmin, self).get_urls() |
|
|
|
return urls + super_urls |
|
|
|
def manage_view(self, request, id, form_url='', extra_context=None): |
|
opts = Widget._meta |
|
form = ManageWidgetForm() |
|
obj = Widget.objects.get(pk=id) |
|
|
|
if not self.has_change_permission(request, obj): |
|
raise PermissionDenied |
|
|
|
# do cool management stuff here |
|
|
|
preserved_filters = self.get_preserved_filters(request) |
|
form_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, form_url) |
|
|
|
context = { |
|
'title': 'Manage %s' % obj, |
|
'has_change_permission': self.has_change_permission(request, obj), |
|
'form_url': form_url, |
|
'opts': opts, |
|
'errors': form.errors, |
|
'app_label': opts.app_label, |
|
'original': obj, |
|
} |
|
context.update(extra_context or {}) |
|
|
|
return render(request, self.manage_view_template, context) |
|
admin.site.register(Widget, WidgetAdmin) |