def deletion_not_allowed(self, request, obj, language_code): opts = self.model._meta app_label = opts.app_label object_name = force_unicode(opts.verbose_name) context = RequestContext(request) context['object'] = obj.master context['language_code'] = language_code context['opts'] = opts context['app_label'] = app_label context['language_name'] = get_language_name(language_code) context['object_name'] = object_name return render_to_response(self.deletion_not_allowed_template, context)
def delete_translation(self, request, object_id, language_code): "The 'delete translation' admin view for this model." opts = self.model._meta app_label = opts.app_label translations_model = opts.translations_model try: obj = translations_model.objects.select_related('maser').get( master__pk=unquote(object_id), language_code=language_code) except translations_model.DoesNotExist: raise Http404 if not self.has_delete_permission(request, obj): raise PermissionDenied if len(self.get_available_languages(obj.master)) <= 1: return self.deletion_not_allowed(request, obj, language_code) using = router.db_for_write(translations_model) # Populate deleted_objects, a data structure of all related objects that # will also be deleted. protected = False deleted_objects, perms_needed, protected = get_deleted_objects( [obj], translations_model._meta, request.user, self.admin_site, using) lang = get_language_name(language_code) if request.POST: # The user has already confirmed the deletion. if perms_needed: raise PermissionDenied obj_display = '%s translation of %s' % (lang, force_unicode(obj.master)) self.log_deletion(request, obj, obj_display) self.delete_model_translation(request, obj) self.message_user(request, _('The %(name)s "%(obj)s" was deleted successfully.') % { 'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj_display) } ) if not self.has_change_permission(request, None): return HttpResponseRedirect(self.reverse('admin:index')) model_name = opts.model_name if django.VERSION >= (1, 6) else opts.module_name return HttpResponseRedirect(self.reverse('admin:%s_%s_changelist' % (opts.app_label, model_name))) object_name = '%s Translation' % force_unicode(opts.verbose_name) if perms_needed or protected: title = _("Cannot delete %(name)s") % {"name": object_name} else: title = _("Are you sure?") context = { "title": title, "object_name": object_name, "object": obj, "deleted_objects": deleted_objects, "perms_lacking": perms_needed, "protected": protected, "opts": opts, "app_label": app_label, } # in django > 1.4 root_path is removed if hasattr(self.admin_site, 'root_path'): context.update({"root_path": self.admin_site.root_path}) return render_to_response(self.delete_confirmation_template or [ "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()), "admin/%s/delete_confirmation.html" % app_label, "admin/delete_confirmation.html" ], context, RequestContext(request))
def delete_translation(self, request, object_id, language_code): "The 'delete translation' admin view for this model." opts = self.model._meta app_label = opts.app_label translations_model = opts.translations_model try: obj = translations_model.objects.select_related('maser').get( master__pk=unquote(object_id), language_code=language_code) except translations_model.DoesNotExist: raise Http404 if not self.has_delete_permission(request, obj): raise PermissionDenied if len(self.get_available_languages(obj.master)) <= 1: return self.deletion_not_allowed(request, obj, language_code) using = router.db_for_write(translations_model) # Populate deleted_objects, a data structure of all related objects that # will also be deleted. protected = False if NEW_GET_DELETE_OBJECTS: (deleted_objects, perms_needed, protected) = get_deleted_objects([obj], translations_model._meta, request.user, self.admin_site, using) else: # pragma: no cover (deleted_objects, perms_needed) = get_deleted_objects([obj], translations_model._meta, request.user, self.admin_site) lang = get_language_name(language_code) if request.POST: # The user has already confirmed the deletion. if perms_needed: raise PermissionDenied obj_display = '%s translation of %s' % (lang, force_unicode(obj.master)) self.log_deletion(request, obj, obj_display) self.delete_model_translation(request, obj) self.message_user( request, _('The %(name)s "%(obj)s" was deleted successfully.') % { 'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj_display) }) if not self.has_change_permission(request, None): return HttpResponseRedirect(reverse('admin:index')) return HttpResponseRedirect( reverse('admin:%s_%s_changelist' % (opts.app_label, opts.module_name))) object_name = '%s Translation' % force_unicode(opts.verbose_name) if perms_needed or protected: title = _("Cannot delete %(name)s") % {"name": object_name} else: title = _("Are you sure?") context = { "title": title, "object_name": object_name, "object": obj, "deleted_objects": deleted_objects, "perms_lacking": perms_needed, "protected": protected, "opts": opts, "app_label": app_label, } # in django > 1.4 root_path is removed if hasattr(self.admin_site, 'root_path'): context.update({"root_path": self.admin_site.root_path}) return render_to_response( self.delete_confirmation_template or [ "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()), "admin/%s/delete_confirmation.html" % app_label, "admin/delete_confirmation.html" ], context, RequestContext(request))