mirror of
https://github.com/django/django.git
synced 2025-07-05 10:19:20 +00:00
newforms-admin: Implemented ModelAdminView.delete_view()
git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@4321 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
621e64035e
commit
414f34d9e8
@ -13,6 +13,7 @@ from django.http import Http404, HttpResponse, HttpResponseRedirect
|
|||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
from django.utils.text import capfirst, get_text_list
|
from django.utils.text import capfirst, get_text_list
|
||||||
import operator
|
import operator
|
||||||
|
import sets
|
||||||
|
|
||||||
from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION
|
from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION
|
||||||
if not LogEntry._meta.installed:
|
if not LogEntry._meta.installed:
|
||||||
@ -167,7 +168,37 @@ class ModelAdminView(object):
|
|||||||
|
|
||||||
def delete_view(self, request, object_id):
|
def delete_view(self, request, object_id):
|
||||||
"The 'delete' admin view for this model."
|
"The 'delete' admin view for this model."
|
||||||
raise NotImplementedError('Delete view with object %r' % object_id)
|
opts = self.model._meta
|
||||||
|
app_label = opts.app_label
|
||||||
|
if not request.user.has_perm(app_label + '.' + opts.get_delete_permission()):
|
||||||
|
raise PermissionDenied
|
||||||
|
obj = get_object_or_404(self.model, pk=object_id)
|
||||||
|
|
||||||
|
# Populate deleted_objects, a data structure of all related objects that
|
||||||
|
# will also be deleted.
|
||||||
|
deleted_objects = ['%s: <a href="../../%s/">%s</a>' % (capfirst(opts.verbose_name), object_id, escape(str(obj))), []]
|
||||||
|
perms_needed = sets.Set()
|
||||||
|
_get_deleted_objects(deleted_objects, perms_needed, request.user, obj, opts, 1)
|
||||||
|
|
||||||
|
if request.POST: # The user has already confirmed the deletion.
|
||||||
|
if perms_needed:
|
||||||
|
raise PermissionDenied
|
||||||
|
obj_display = str(obj)
|
||||||
|
obj.delete()
|
||||||
|
LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(self.model).id, object_id, obj_display, DELETION)
|
||||||
|
request.user.message_set.create(message=_('The %(name)s "%(obj)s" was deleted successfully.') % {'name': opts.verbose_name, 'obj': obj_display})
|
||||||
|
return HttpResponseRedirect("../../")
|
||||||
|
extra_context = {
|
||||||
|
"title": _("Are you sure?"),
|
||||||
|
"object_name": opts.verbose_name,
|
||||||
|
"object": obj,
|
||||||
|
"deleted_objects": deleted_objects,
|
||||||
|
"perms_lacking": perms_needed,
|
||||||
|
"opts": opts,
|
||||||
|
}
|
||||||
|
return render_to_response(["admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower() ),
|
||||||
|
"admin/%s/delete_confirmation.html" % app_label ,
|
||||||
|
"admin/delete_confirmation.html"], extra_context, context_instance=template.RequestContext(request))
|
||||||
|
|
||||||
def history_view(self, request, object_id):
|
def history_view(self, request, object_id):
|
||||||
"The 'history' admin view for this model."
|
"The 'history' admin view for this model."
|
||||||
@ -570,44 +601,6 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current
|
|||||||
if not user.has_perm(p):
|
if not user.has_perm(p):
|
||||||
perms_needed.add(related.opts.verbose_name)
|
perms_needed.add(related.opts.verbose_name)
|
||||||
|
|
||||||
def delete_stage(request, app_label, model_name, object_id):
|
|
||||||
import sets
|
|
||||||
model = models.get_model(app_label, model_name)
|
|
||||||
object_id = unquote(object_id)
|
|
||||||
if model is None:
|
|
||||||
raise Http404("App %r, model %r, not found" % (app_label, model_name))
|
|
||||||
opts = model._meta
|
|
||||||
if not request.user.has_perm(app_label + '.' + opts.get_delete_permission()):
|
|
||||||
raise PermissionDenied
|
|
||||||
obj = get_object_or_404(model, pk=object_id)
|
|
||||||
|
|
||||||
# Populate deleted_objects, a data structure of all related objects that
|
|
||||||
# will also be deleted.
|
|
||||||
deleted_objects = ['%s: <a href="../../%s/">%s</a>' % (capfirst(opts.verbose_name), object_id, escape(str(obj))), []]
|
|
||||||
perms_needed = sets.Set()
|
|
||||||
_get_deleted_objects(deleted_objects, perms_needed, request.user, obj, opts, 1)
|
|
||||||
|
|
||||||
if request.POST: # The user has already confirmed the deletion.
|
|
||||||
if perms_needed:
|
|
||||||
raise PermissionDenied
|
|
||||||
obj_display = str(obj)
|
|
||||||
obj.delete()
|
|
||||||
LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(model).id, object_id, obj_display, DELETION)
|
|
||||||
request.user.message_set.create(message=_('The %(name)s "%(obj)s" was deleted successfully.') % {'name': opts.verbose_name, 'obj': obj_display})
|
|
||||||
return HttpResponseRedirect("../../")
|
|
||||||
extra_context = {
|
|
||||||
"title": _("Are you sure?"),
|
|
||||||
"object_name": opts.verbose_name,
|
|
||||||
"object": obj,
|
|
||||||
"deleted_objects": deleted_objects,
|
|
||||||
"perms_lacking": perms_needed,
|
|
||||||
"opts": model._meta,
|
|
||||||
}
|
|
||||||
return render_to_response(["admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower() ),
|
|
||||||
"admin/%s/delete_confirmation.html" % app_label ,
|
|
||||||
"admin/delete_confirmation.html"], extra_context, context_instance=template.RequestContext(request))
|
|
||||||
delete_stage = staff_member_required(never_cache(delete_stage))
|
|
||||||
|
|
||||||
class ChangeList(object):
|
class ChangeList(object):
|
||||||
def __init__(self, request, model):
|
def __init__(self, request, model):
|
||||||
self.model = model
|
self.model = model
|
||||||
|
Loading…
x
Reference in New Issue
Block a user