PageRenderTime 49ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/django/contrib/admin/actions.py

https://code.google.com/p/mango-py/
Python | 85 lines | 75 code | 2 blank | 8 comment | 0 complexity | c15093942ec8f1ef97369b552c590fcb MD5 | raw file
Possible License(s): BSD-3-Clause
  1. """
  2. Built-in, globally-available admin actions.
  3. """
  4. from django import template
  5. from django.core.exceptions import PermissionDenied
  6. from django.contrib.admin import helpers
  7. from django.contrib.admin.util import get_deleted_objects, model_ngettext
  8. from django.db import router
  9. from django.shortcuts import render_to_response
  10. from django.utils.encoding import force_unicode
  11. from django.utils.translation import ugettext_lazy, ugettext as _
  12. def delete_selected(modeladmin, request, queryset):
  13. """
  14. Default action which deletes the selected objects.
  15. This action first displays a confirmation page whichs shows all the
  16. deleteable objects, or, if the user has no permission one of the related
  17. childs (foreignkeys), a "permission denied" message.
  18. Next, it delets all selected objects and redirects back to the change list.
  19. """
  20. opts = modeladmin.model._meta
  21. app_label = opts.app_label
  22. # Check that the user has delete permission for the actual model
  23. if not modeladmin.has_delete_permission(request):
  24. raise PermissionDenied
  25. using = router.db_for_write(modeladmin.model)
  26. # Populate deletable_objects, a data structure of all related objects that
  27. # will also be deleted.
  28. deletable_objects, perms_needed, protected = get_deleted_objects(
  29. queryset, opts, request.user, modeladmin.admin_site, using)
  30. # The user has already confirmed the deletion.
  31. # Do the deletion and return a None to display the change list view again.
  32. if request.POST.get('post'):
  33. if perms_needed:
  34. raise PermissionDenied
  35. n = queryset.count()
  36. if n:
  37. for obj in queryset:
  38. obj_display = force_unicode(obj)
  39. modeladmin.log_deletion(request, obj, obj_display)
  40. queryset.delete()
  41. modeladmin.message_user(request, _("Successfully deleted %(count)d %(items)s.") % {
  42. "count": n, "items": model_ngettext(modeladmin.opts, n)
  43. })
  44. # Return None to display the change list page again.
  45. return None
  46. if len(queryset) == 1:
  47. objects_name = force_unicode(opts.verbose_name)
  48. else:
  49. objects_name = force_unicode(opts.verbose_name_plural)
  50. if perms_needed or protected:
  51. title = _("Cannot delete %(name)s") % {"name": objects_name}
  52. else:
  53. title = _("Are you sure?")
  54. context = {
  55. "title": title,
  56. "objects_name": objects_name,
  57. "deletable_objects": [deletable_objects],
  58. 'queryset': queryset,
  59. "perms_lacking": perms_needed,
  60. "protected": protected,
  61. "opts": opts,
  62. "root_path": modeladmin.admin_site.root_path,
  63. "app_label": app_label,
  64. 'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
  65. }
  66. # Display the confirmation page
  67. return render_to_response(modeladmin.delete_selected_confirmation_template or [
  68. "admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.object_name.lower()),
  69. "admin/%s/delete_selected_confirmation.html" % app_label,
  70. "admin/delete_selected_confirmation.html"
  71. ], context, context_instance=template.RequestContext(request))
  72. delete_selected.short_description = ugettext_lazy("Delete selected %(verbose_name_plural)s")