def response_change(self, request, obj): opts = self.model._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) msg_dict = { 'name': force_text(opts.verbose_name), 'obj': format_html('<a href="{}">{}</a>', urlquote(request.path), obj), } if "_continue" in request.POST: msg = format_html( _('The {name} "{obj}" was changed successfully. You may edit it again below.' ), **msg_dict) self.message_user(request, msg, messages.SUCCESS) redirect_url = request.path redirect_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, redirect_url) return HttpResponseRedirect(redirect_url) elif "_saveasnew" in request.POST: msg = format_html( _('The {name} "{obj}" was added successfully. You may edit it again below.' ), **msg_dict) self.message_user(request, msg, messages.SUCCESS) redirect_url = reverse('admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(pk_value, ), current_app=self.admin_site.name) redirect_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, redirect_url) return HttpResponseRedirect(redirect_url) elif "_addanother" in request.POST: msg = format_html( _('The {name} "{obj}" was changed successfully. You may add another {name} below.' ), **msg_dict) self.message_user(request, msg, messages.SUCCESS) redirect_url = reverse('admin:add_topic', kwargs={'course_pk': obj.course.id}, current_app=self.admin_site.name) redirect_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, redirect_url) return HttpResponseRedirect(redirect_url) else: msg = format_html( _('The {name} "{obj}" was changed successfully.'), **msg_dict) self.message_user(request, msg, messages.SUCCESS) return self.response_post_save_change(request, obj)
def manage(obj): """ @summary: this fucntion provide two link Edit/Delete for list_display of models :param obj: current instance :return: two links to edit and delete using django admin reverse url for same """ opts = self.model._meta opts.model_name = self.model._meta.model_name info = opts.app_label, opts.model_name preserved_filters = self.get_preserved_filters(request) change_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, reverse( 'admin:%s_%s_change' % info, args=[obj.id], )) delete_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, reverse( 'admin:%s_%s_delete' % info, args=[obj.id], )) return format_html( '<a class="changelink" href="{}">Edit</a> ' '<a class="deletelink" href="{}">Delete</a>', change_url, delete_url)
def response_change(self, request, obj): opts = self.model._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) if "_pay-salary" in request.POST and request.user.user_type == 0: transfer_note = request.POST.get("_note") obj.pay_salary(request.user, transfer_note) obj.save() redirect_url = reverse('admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(pk_value,), current_app=self.admin_site.name) redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) messages.info(request, "Salary transfered!") return HttpResponseRedirect(redirect_url) elif "_refund" in request.POST and request.user.user_type == 0: transfer_note = request.POST.get("_note") obj.refund(request.user, transfer_note) obj.save() redirect_url = reverse('admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(pk_value,), current_app=self.admin_site.name) redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) messages.info(request, "Payment refunded!") return HttpResponseRedirect(redirect_url) else: return super(BookingAdmin, self).response_change(request, obj)
def response_change(self, request, obj): """ Determines the HttpResponse for the change_view stage. """ if '_approve' in request.POST: try: obj.staff_approve(request.user) except ValidationError as e: msg = _("Unable to approve service '{name}': {error}.") msg = msg.format(name=obj.name, error=validation_error_as_text(e)) self.message_user(request, msg, messages.ERROR) redirect_url = add_preserved_filters( {'preserved_filters': self.get_preserved_filters(request), 'opts': self.model._meta}, request.path) return HttpResponseRedirect(redirect_url) else: msg = _('The service was approved successfully.') self.message_user(request, msg, messages.SUCCESS) elif '_reject' in request.POST: try: obj.staff_reject(request.user) except ValidationError as e: msg = _("Unable to reject service '{name}': {error}.") msg = msg.format(name=obj.name, error=validation_error_as_text(e)) self.message_user(request, msg, messages.ERROR) redirect_url = add_preserved_filters( {'preserved_filters': self.get_preserved_filters(request), 'opts': self.model._meta}, request.path) return HttpResponseRedirect(redirect_url) else: msg = _('The service was rejected successfully.') self.message_user(request, msg, messages.INFO) return super().response_change(request, obj)
def response_change(self, request, obj): opts = self.model._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) if "_process" in request.POST: # handle the action on your obj processor = processors.GamesheetProcessor() processor.process(obj) redirect_url = reverse('admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(pk_value,), current_app=self.admin_site.name) redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) elif "_store" in request.POST: translator = translators.ProcessedGameTranslator() translator.translate(obj) post_url = reverse('admin:%s_%s_changelist' % (opts.app_label, opts.model_name), current_app=self.admin_site.name) preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, post_url) return HttpResponseRedirect(post_url) else: return super(ProcessedGameAdmin, self).response_change(request, obj)
def response_change(self, request, obj): """ Determines the HttpResponse for the change_view stage. """ if '_popup' in request.POST: to_field = request.POST.get('_to_field') attr = str(to_field) if to_field else obj._meta.pk.attname # Retrieve the `object_id` from the resolved pattern arguments. value = request.resolver_match.args[0] new_value = obj.serializable_value(attr) return SimpleTemplateResponse('admin/popup_response.html', { 'action': 'change', 'value': escape(value), 'obj': escapejs(obj), 'new_value': escape(new_value), }) opts = self.model._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)} if "_continue" in request.POST: # Translators: Translation included with Django msg = _('The %(name)s "%(obj)s" was changed successfully. You may edit it again below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.prefix + request.path redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) elif "_saveasnew" in request.POST: # Translators: Translation included with Django msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.prefix + reverse( 'admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(pk_value,), current_app=self.admin_site.name ) redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) elif "_addanother" in request.POST: # Translators: Translation included with Django msg = _('The %(name)s "%(obj)s" was added successfully. You may add another %(name)s below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.prefix + reverse( 'admin:%s_%s_add' % (opts.app_label, opts.model_name), current_app=self.admin_site.name ) redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) else: # Translators: Translation included with Django msg = _('The %(name)s "%(obj)s" was changed successfully.') % msg_dict self.message_user(request, msg, messages.SUCCESS) # Redirect to previous url return HttpResponseRedirect("%s%s" % (request.prefix, request.session['crumbs'][request.prefix][-2][2]))
def jet_add_preserved_filters(context, url, popup=False, to_field=None): try: from django.contrib.admin.templatetags.admin_urls import add_preserved_filters try: return add_preserved_filters(context, url, popup, to_field) except TypeError: return add_preserved_filters(context, url, popup) # old django except ImportError: return url
def response_add(self, request, obj, post_url_continue=None): """ Determines the HttpResponse for the add_view stage. """ opts = obj._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) msg_dict = { 'name': force_text(opts.verbose_name), 'obj': force_text(obj) } # Here, we distinguish between different save types by checking for # the presence of keys in request.POST. if "_popup" in request.POST: return SimpleTemplateResponse('admin/popup_response.html', { 'pk_value': escape(pk_value), 'obj': escapejs(obj) }) elif "_continue" in request.POST: msg = _( 'The %(name)s "%(obj)s" was added successfully. You may edit it again below.' ) % msg_dict self.message_user(request, msg, messages.SUCCESS) if post_url_continue is None: post_url_continue = request.prefix + reverse( 'admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(pk_value, ), current_app=self.admin_site.name) post_url_continue = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, post_url_continue) return HttpResponseRedirect(post_url_continue) elif "_addanother" in request.POST: msg = _( 'The %(name)s "%(obj)s" was added successfully. You may add another %(name)s below.' ) % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.prefix + request.path redirect_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, redirect_url) return HttpResponseRedirect(redirect_url) else: msg = _( 'The %(name)s "%(obj)s" was added successfully.') % msg_dict self.message_user(request, msg, messages.SUCCESS) # Redirect to previous crumb return HttpResponseRedirect( request.session['crumbs'][request.prefix][-2][2])
def jet_add_preserved_filters(context, url, popup=False, to_field=None): try: from django.contrib.admin.templatetags.admin_urls import add_preserved_filters try: return add_preserved_filters(context, url, popup, to_field) except TypeError: return add_preserved_filters(context, url, popup) # old django except ImportError: return url
def response_post_save_change(self, request, obj): from django.http import HttpResponseRedirect from django.contrib.admin.templatetags.admin_urls import add_preserved_filters from django.core.urlresolvers import reverse from django.template.loader import get_template from django.template.response import TemplateResponse if request.POST.get('filter_previous') and request.POST.get( 'filter_previous') == 'on': if request.POST.get('post'): opts = self.model._meta if self.has_change_permission(request, None): post_url = reverse('admin:{}_{}_changelist'.format( opts.app_label, opts.model_name), current_app=self.admin_site.name) preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, post_url) else: post_url = reverse('admin:index', current_app=self.admin_site.name) return HttpResponseRedirect(post_url) if not request.POST.get('post'): context = { 'title': "Filter Previous Confirmation", 'formset': request.POST, 'request': request, } confirmation_page = get_template( 'django_fulcrum/confirmation.html') return TemplateResponse(request, confirmation_page, context, current_app=self.admin_site.name) else: opts = self.model._meta if self.has_change_permission(request, None): post_url = reverse('admin:{}_{}_changelist'.format( opts.app_label, opts.model_name), current_app=self.admin_site.name) preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, post_url) else: post_url = reverse('admin:index', current_app=self.admin_site.name) return HttpResponseRedirect(post_url)
def response_add(self, request, obj, post_url_continue=None): """ Determines the HttpResponse for the add_view stage. """ opts = obj._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) obj_url = reverse( 'admin:change_topic', args=(self._course.id, quote(pk_value)), current_app=self.admin_site.name, ) if self.has_change_permission(request, obj): obj_repr = format_html('<a href="{}">{}</a>', urlquote(obj_url), obj) else: obj_repr = force_text(obj) msg_dict = {'name': force_text(opts.verbose_name), 'obj': obj_repr} if "_continue" in request.POST or ( # Redirecting after "Save as new". "_saveasnew" in request.POST and self.save_as_continue and self.has_change_permission(request, obj)): msg = format_html( _('The {name} "{obj}" was added successfully. You may edit it again below.' ), **msg_dict) self.message_user(request, msg, messages.SUCCESS) if post_url_continue is None: post_url_continue = obj_url post_url_continue = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, post_url_continue) return HttpResponseRedirect(post_url_continue) elif "_addanother" in request.POST: msg = format_html( _('The {name} "{obj}" was added successfully. You may add another {name} below.' ), **msg_dict) self.message_user(request, msg, messages.SUCCESS) redirect_url = request.path redirect_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, redirect_url) return HttpResponseRedirect(redirect_url) else: msg = format_html(_('The {name} "{obj}" was added successfully.'), **msg_dict) self.message_user(request, msg, messages.SUCCESS) return self.response_post_save_add(request, obj)
def response_add(self, request, obj, post_url_continue=None): """ Determines the HttpResponse for the add_view stage. """ opts = obj._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)} # Here, we distinguish between different save types by checking for # the presence of keys in request.POST. if '_popup' in request.POST: to_field = request.POST.get('_to_field') if to_field: attr = str(to_field) else: attr = obj._meta.pk.attname value = obj.serializable_value(attr) return SimpleTemplateResponse('admin/popup_response.html', { 'pk_value': escape(pk_value), # for possible backwards-compatibility 'value': escape(value), 'obj': escapejs(obj) }) elif "_continue" in request.POST: # Translators: Translation included with Django msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) if post_url_continue is None: post_url_continue = request.prefix + reverse( 'admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(quote(pk_value),), current_app=self.admin_site.name ) post_url_continue = add_preserved_filters( {'preserved_filters': preserved_filters, 'opts': opts}, post_url_continue ) return HttpResponseRedirect(post_url_continue) elif "_addanother" in request.POST: # Translators: Translation included with Django msg = _('The %(name)s "%(obj)s" was added successfully. You may add another %(name)s below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.prefix + request.path redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) else: # Translators: Translation included with Django msg = _('The %(name)s "%(obj)s" was added successfully.') % msg_dict self.message_user(request, msg, messages.SUCCESS) # Redirect to previous url return HttpResponseRedirect("%s%s" % (request.prefix, request.session['crumbs'][request.prefix][-2][2]))
def response_change(self, request, obj): """ Determines the HttpResponse for the change_view stage. """ opts = self.model._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) if "_continue" in request.POST and obj.status == Status.PUBLISH: # It seems it does update action, reload fresh latest version one from database. cls = obj.__class__ obj = cls.objects.filter(uuid=obj.uuid).order_by("-version")[0] pk_value = obj._get_pk_val() msg_dict = {"name": force_text(opts.verbose_name), "obj": force_text(obj)} if "_continue" in request.POST: msg = _('The %(name)s "%(obj)s" was changed successfully. You may edit it again below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) # redirect_url = request.path content_type = ContentType.objects.get_for_model(obj.__class__) redirect_url = urlresolvers.reverse( "admin:%s_%s_change" % (content_type.app_label, content_type.model), args=[pk_value] ) redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url) return HttpResponseRedirect(redirect_url) elif "_saveasnew" in request.POST: msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = reverse( "admin:%s_%s_change" % (opts.app_label, opts.model_name), args=(pk_value,), current_app=self.admin_site.name, ) redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url) return HttpResponseRedirect(redirect_url) elif "_addanother" in request.POST: msg = _('The %(name)s "%(obj)s" was changed successfully. You may add another %(name)s below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = reverse( "admin:%s_%s_add" % (opts.app_label, opts.model_name), current_app=self.admin_site.name ) redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url) return HttpResponseRedirect(redirect_url) else: msg = _('The %(name)s "%(obj)s" was changed successfully.') % msg_dict self.message_user(request, msg, messages.SUCCESS) return self.response_post_save_change(request, obj)
def response_add(self, request, obj, post_url_continue=None): """ Determines the HttpResponse for the add_view stage. """ opts = obj._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)} # Here, we distinguish between different save types by checking for # the presence of keys in request.POST. if IS_POPUP_VAR in request.POST: to_field = request.POST.get(TO_FIELD_VAR) if to_field: attr = str(to_field) else: attr = obj._meta.pk.attname value = obj.serializable_value(attr) return SimpleTemplateResponse('admin/popup_response.html', { 'value': value, 'obj': obj, }) elif "_returntolist" in request.POST: return HttpResponseRedirect('/task/list') elif "_continue" in request.POST: msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) if post_url_continue is None: post_url_continue = reverse('admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(quote(pk_value),), current_app=self.admin_site.name) post_url_continue = add_preserved_filters( {'preserved_filters': preserved_filters, 'opts': opts}, post_url_continue ) return HttpResponseRedirect(post_url_continue) elif "_addanother" in request.POST: msg = _('The %(name)s "%(obj)s" was added successfully. You may add another %(name)s below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.path redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) else: msg = _('The %(name)s "%(obj)s" was added successfully.') % msg_dict self.message_user(request, msg, messages.SUCCESS) return self.response_post_save_add(request, obj)
def response_add(self, request, obj, post_url_continue=None): if "_popup" in request.POST: return super().response_add(request, obj, post_url_continue=post_url_continue) opts = obj._meta preserved_filters = self.get_preserved_filters(request) obj_url = reverse( 'admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(quote(obj.pk),), current_app=self.admin_site.name, ) # Add a link to the object's change form if the user can edit the obj. if self.has_change_permission(request, obj): obj_repr = format_html('<a href="{}">{}</a>', urlquote(obj_url), obj) else: obj_repr = str(obj) msg_dict = { 'name': opts.verbose_name.capitalize(), 'obj': obj_repr, } if "_continue" in request.POST or ( # Redirecting after "Save as new". "_saveasnew" in request.POST and self.save_as_continue and self.has_change_permission(request, obj)): msg = self.get_msg_template('add_continue_msg_template') if self.has_change_permission(request, obj): msg += ' ' + gettext('You may edit it again below.') self.message_user(request, format_html(msg, **msg_dict), messages.SUCCESS) if post_url_continue is None: post_url_continue = obj_url post_url_continue = add_preserved_filters( {'preserved_filters': preserved_filters, 'opts': opts}, post_url_continue ) return HttpResponseRedirect(post_url_continue) elif "_addanother" in request.POST: msg = format_html(self.get_msg_template('add_addanother_msg_template'), **msg_dict) self.message_user(request, msg, messages.SUCCESS) redirect_url = request.path redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) else: msg = format_html( self.get_msg_template('add_msg_template'), **msg_dict) self.message_user(request, msg, messages.SUCCESS) return self.response_post_save_add(request, obj)
def response_post_save_add(self, request, obj): # If an application provides a custom config class, we want to redirect back to # the change form so that the user can fill the settings in. try: has_config_class = obj.application.has_config_class except Registry.IntegrationUnavailableException: has_config_class = False if has_config_class: opts = self.model._meta preserved_filters = self.get_preserved_filters(request) msg_dict = { "name": opts.verbose_name, "obj": format_html('<a href="{}">{}</a>', urlquote(request.path), obj), } msg = format_html( _( 'The {name} "{obj}" was added successfully. ' "You may fill in the configuration settings below." ), **msg_dict, ) self.message_user(request, msg, messages.SUCCESS) redirect_url = reverse( "admin:%s_%s_change" % (opts.app_label, opts.model_name), args=(obj.pk,), current_app=self.admin_site.name, ) redirect_url = add_preserved_filters( {"preserved_filters": preserved_filters, "opts": opts}, redirect_url ) return HttpResponseRedirect(redirect_url) return super().response_post_save_add(request, obj)
def response_change(self, request, obj): opts = self.model._meta preserved_filters = self.get_preserved_filters(request) if not overtime(obj.id): if '_abandon' in request.POST: obj.status = models.InternTask.ABANDONED obj.time_ended = timezone.now() obj.save() msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj.task.title)} msg = _('The %(name)s %(obj)s was abandoned!') % msg_dict self.message_user(request, msg, messages.WARNING, extra_tags='safe') return self.response_post_save_change(request, obj) elif '_preview' in request.POST: redirect_url = request.path + '?preview=true' redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) elif '_submit' in request.POST: obj.status = models.InternTask.FINISHED obj.time_ended = timezone.now() obj.save() msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj.task.title)} msg = _('You submitted the %(name)s %(obj)s!') % msg_dict self.message_user(request, msg, messages.SUCCESS, extra_tags='safe') return self.response_post_save_change(request, obj) else: return super(Dashboard, self).response_change(request, obj) else: return super(Dashboard, self).response_change(request, obj)
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None): # Include a 'base_change_form_template' in the context, make it easier to extend # the ct_id parameter can be skipped when the direct URL is used (instead of the proxied polymorphic add view) context.update({ 'base_change_form_template': self.base_change_form_template, 'default_change_form_template': _lazy_get_default_change_form_template(self), 'ct_id': int( ContentType.objects.get_for_model(obj).pk if change else request.GET.get('ct_id', 0)) # HACK for polymorphic admin }) # django-parler does this, so we have to do it too form_url = add_preserved_filters( { 'preserved_filters': urlencode({'ct_id': context['ct_id']}), 'opts': self.model._meta }, form_url) return super(DefaultPageChildAdmin, self).render_change_form(request, context, add=add, change=change, form_url=form_url, obj=obj)
def response_delete(self, request, obj_display, obj_id): """ Determines the HttpResponse for the delete_view stage. """ opts = self.model._meta if IS_POPUP_VAR in request.POST: popup_response_data = json.dumps({ 'action': 'delete', 'value': str(obj_id), }) return TemplateResponse( request, self.popup_response_template or self.delete_template, { 'popup_response_data': popup_response_data, }) self.message_user( request, _('The %(name)s "%(obj)s" was deleted successfully.') % { 'name': force_text(opts.verbose_name), 'obj': force_text(obj_display), }, messages.SUCCESS, ) post_url = self.redirect_url preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, post_url) return HttpResponseRedirect(post_url)
def response_change(self, request, obj): opts = self.model._meta preserved_filters = self.get_preserved_filters(request) msg_dict = { 'name': force_text(opts.verbose_name), 'obj': force_text(obj) } if '_reset_data' in request.POST: if obj.is_expired: obj.refresh_access_token() provider = obj.get_provider() profile_data = provider.get_profile_data(obj.raw_token) if profile_data is None: msg = _( 'Could not retrieve profile data for the %(name)s "%(obj)s" ' ) % msg_dict self.message_user(request, msg, messages.ERROR) else: obj.extra_data = provider.extract_extra_data(profile_data) obj.save() msg = _('The %(name)s "%(obj)s" was updated successfully.' ) % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.path redirect_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, redirect_url) return HttpResponseRedirect(redirect_url) return super(AccountAdmin, self).response_change(request, obj)
def response_cancel(self, request, obj): """Determine the HttpResponse for the cancel_order_view stage.""" opts = self.model._meta msg_dict = { 'name': force_text(opts.verbose_name), 'obj': format_html('<a href="{0}">{1}</a>', urlquote(request.path), obj), } msg = format_html( _('The {name} "{obj}" was cancelled successfully.'), **msg_dict, ) self.message_user(request, msg, messages.SUCCESS) preserved_filters = self.get_preserved_filters(request) redirect_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, get_change_url(obj), ) return HttpResponseRedirect(redirect_url)
def manage_view(self, request, id, form_url='', extra_context=None): opts = self.model._meta self.contribute_audit_id(self.model) obj = self.model.objects.get(pk=id) if not self.has_change_permission(request, obj): raise PermissionDenied preserved_filters = self.get_preserved_filters(request) form_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, form_url) # Get changes history = self.get_row_logs(obj=obj) context = { 'title': 'Manage %s' % obj, 'has_change_permission': self.has_change_permission(request, obj), 'form_url': form_url, 'opts': opts, 'history': history, 'app_label': opts.app_label, 'original': obj, } context.update(extra_context or {}) return render(request, self.manage_view_template, context)
def response_change(self, request, obj, *args, **kwargs): """ Override response_change method of admin/options.py to handle the click of 'Add Keywords' button """ if "_add_keywords_button" in request.POST: # Get the metadata about self (it tells you app and current model) opts = self.model._meta # Get the primary key of the model object i.e. MUO Container pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) redirect_url = reverse('admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(pk_value, )) redirect_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, redirect_url) self._add_suggested_keywords(request, obj) return HttpResponseRedirect(redirect_url) else: # Let super class 'ModelAdmin' handle rest of the button clicks i.e. 'save' 'save and continue' etc. return super(CWEAdmin, self).response_change(request, obj, *args, **kwargs)
def response_change(self, request: HttpRequest, obj: Domain) -> HttpResponse: opts = self.model._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) msg_dict = { 'name': force_text(opts.verbose_name), 'obj': format_html('<a href="{}">{}</a>', urllib.parse.quote(request.path), obj), } for key in request.POST.keys(): if key.startswith("_genkey-"): if hasattr(obj, key[len("_genkey-"):]): setattr(obj, key[len("_genkey-"):], generate_rsa_key(2048).private_key) obj.save() msg = format_html( _('The {name} "{obj}" was changed successfully. You may edit it again below.' ), **msg_dict) self.message_user(request, msg, messages.SUCCESS) redirect_url = request.path redirect_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, redirect_url) return HttpResponseRedirect(redirect_url) return super().response_change(request, obj)
def response_delete(self, request, obj_display, obj_id): """ Determines the HttpResponse for the delete_view stage. """ opts = self.model._meta if IS_POPUP_VAR in request.POST: return SimpleTemplateResponse('admin/popup_response.html', { 'action': 'delete', 'value': escape(obj_id), }) if self.has_change_permission(request, None): post_url = reverse('admin:%s_%s_changelist' % (opts.app_label, opts.model_name), current_app=self.admin_site.name) preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, post_url) else: post_url = reverse('admin:index', current_app=self.admin_site.name) return HttpResponseRedirect(post_url)
def response_bulk(self, request, formset): model = self.model opts = model._meta preserved_filters = self.get_preserved_filters(request) msg_dict = { 'name': force_text(opts.verbose_name), 'name_plural': force_text(opts.verbose_name_plural), } if IS_POPUP_VAR in request.POST: return self.response_bulk_popup( request, list(formset.queryset) + formset.new_objects) elif '_addanother' in request.POST: msg = _( 'The %(name_plural)s were bulk added successfully. You may add another %(name)s below.' ) % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = reverse('admin:%s_%s_add' % (opts.app_label, opts.model_name), current_app=self.admin_site.name) redirect_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, redirect_url) return HttpResponseRedirect(redirect_url) else: msg = _( 'The %(name_plural)s were bulk added successfully.') % msg_dict self.message_user(request, msg, messages.SUCCESS) return self.response_post_save_add(request, obj=None)
def get_template_values(request, organization_pk): org = get_object_or_404(Organization.query(request, readonly=True), pk=organization_pk) assert isinstance(org, Organization) # noinspection PyProtectedMember model_admin = admin.site._registry[Organization] assert isinstance(model_admin, OrganizationAdmin) # noinspection PyProtectedMember opts = model_admin.model._meta app_label = opts.app_label preserved_filters = model_admin.get_preserved_filters(request) form_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, '?') view_on_site_url = model_admin.get_view_on_site_url(org) template_values = { 'is_popup': 0, 'add': False, 'change': True, 'has_change_permission': model_admin.has_change_permission(request, org), 'has_delete_permission': False, 'has_add_permission': False, 'has_file_field': False, 'has_absolute_url': view_on_site_url is not None, 'absolute_url': view_on_site_url, 'form_url': form_url, 'opts': opts, 'content_type_id': get_content_type_for_model(Task).pk, 'save_as': True, 'save_on_top': False, 'media': model_admin.media, 'to_field_var': TO_FIELD_VAR, 'is_popup_var': IS_POPUP_VAR, 'app_label': app_label, 'show_save': False, } return template_values
def response_change(self, request, obj): opts = self.model._meta preserved_filters = self.get_preserved_filters(request) msg_dict = { "name": opts.verbose_name, "obj": format_html('<a href="{}">{}</a>', urlquote(request.path), obj), } if "_addversion" in request.POST: self.create_new_version(obj) msg = format_html( _('The new version of {name} "{obj}" was successfully created' ), **msg_dict, ) self.message_user(request, msg, messages.SUCCESS) redirect_url = reverse( "admin:%s_%s_change" % (opts.app_label, opts.model_name), args=(obj.pk, ), current_app=self.admin_site.name, ) redirect_url = add_preserved_filters( { "preserved_filters": preserved_filters, "opts": opts }, redirect_url) return HttpResponseRedirect(redirect_url) return super().response_change(request, obj)
def response_change(self, request, obj): # This is mostly copied from ModelAdmin.response_change() opts = self.model._meta preserved_filters = self.get_preserved_filters(request) msg_dict = { "name": opts.verbose_name, "obj": format_html('<a href="{}">{}</a>', urlquote(request.path), obj), } if "_saveandeditnext" in request.POST: msg = format_html( 'The {name} "{obj}" was changed successfully. ' 'Editing next object.', **msg_dict) self.message_user(request, msg, messages.SUCCESS) redirect_url = reverse("admin:{}_{}_change".format( opts.app_label, opts.model_name), args=(request.POST["_next_object"], ), current_app=self.admin_site.name) redirect_url = add_preserved_filters( { "preserved_filters": preserved_filters, "opts": opts }, redirect_url) return HttpResponseRedirect(redirect_url) return super().response_change(request, obj)
def response_post_save_add(self, request, obj): """ Ricalcola l'URL a cui redirigere sulla base del tipo concreto di oggetto creato """ # qualunque file venga creato deve sempre essere rediretto alla changelist della # cartella di riferimento o all'elenco dei file senza cartella if obj.folder: post_url = reverse('admin:filer-directory_listing', kwargs={'folder_id': obj.folder.id}) else: post_url = reverse('admin:filer-directory_listing-unfiled_images') if not obj.file or Immagine.matches_file_type(obj.file.path, None, request): obj = File.objects.non_polymorphic().get(pk=obj.pk) opts = obj._meta if self.has_change_permission(request, None): preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, post_url) else: post_url = reverse('admin:index', current_app=self.admin_site.name) return HttpResponseRedirect(post_url)
def response_change(self, request, obj): opts = self.model._meta preserved_filters = self.get_preserved_filters(request) msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)} if '_reset_data' in request.POST: if obj.is_expired: obj.refresh_access_token() provider = obj.get_provider() profile_data = provider.get_profile_data(obj.raw_token) if profile_data is None: msg = _('Could not retrieve profile data for the %(name)s "%(obj)s" ') % msg_dict self.message_user(request, msg, messages.ERROR) else: obj.extra_data = provider.extract_extra_data(profile_data) obj.save() msg = _('The %(name)s "%(obj)s" was updated successfully.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.path redirect_url = add_preserved_filters( {'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) return super(AccountAdmin, self).response_change(request, obj)
def response_add(self, request, obj, post_url_continue=None): """ Based on https://github.com/django/django/blob/2.2.17/django/contrib/admin/options.py#L1165 Customizations of the returned messages """ opts = obj._meta preserved_filters = self.get_preserved_filters(request) msg_dict = { "name": opts.verbose_name, } if "_addanother" in request.POST: msg = format_html(_(self._get_first_phrase()), **msg_dict) self.message_user(request, msg, messages.SUCCESS) redirect_url = request.path redirect_url = add_preserved_filters( { "preserved_filters": preserved_filters, "opts": opts }, redirect_url) return HttpResponseRedirect(redirect_url) msg = format_html( _(self._get_first_phrase() + " The task might already have finished, for that its entry can already appear on the list below." ), **msg_dict, ) self.message_user(request, msg, messages.SUCCESS) return self.response_post_save_add(request, obj)
def manage_view(self, request, id, form_url='', extra_context=None): opts = self.model._meta self.contribute_audit_id(self.model) obj = self.model.objects.get(pk=id) if not self.has_change_permission(request, obj): raise PermissionDenied preserved_filters = self.get_preserved_filters(request) form_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, form_url) # Get changes history = self.get_row_logs(obj=obj) context = { 'title': 'Manage %s' % obj, 'has_change_permission': self.has_change_permission(request, obj), 'form_url': form_url, 'opts': opts, 'history': history, 'app_label': opts.app_label, 'original': obj, } context.update(extra_context or {}) return render(request, self.manage_view_template, context)
def response_delete(self, request, obj_display, obj_id, course_id): opts = self.model._meta self.message_user( request, _('The %(name)s "%(obj)s" was deleted successfully.') % { 'name': force_text(opts.verbose_name), 'obj': force_text(obj_display), }, messages.SUCCESS, ) if self.has_change_permission(request, None): post_url = reverse('admin:training_course_change', args=[course_id], current_app=self.admin_site.name) preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, post_url) else: post_url = reverse('admin:index', current_app=self.admin_site.name) return HttpResponseRedirect(post_url)
def response_post_save_add(self, request, obj): """ Ricalcola l'URL a cui redirigere sulla base del tipo concreto di oggetto creato """ # qualunque file venga creato deve sempre essere rediretto alla changelist della # cartella di riferimento o all'elenco dei file senza cartella if obj.folder: post_url = reverse('admin:filer-directory_listing', kwargs={ 'folder_id': obj.folder.id }) else: post_url = reverse('admin:filer-directory_listing-unfiled_images') if not obj.file or Immagine.matches_file_type(obj.file.path, None, request): obj = File.objects.non_polymorphic().get(pk=obj.pk) opts = obj._meta if self.has_change_permission(request, None): preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters( {'preserved_filters': preserved_filters, 'opts': opts}, post_url ) else: post_url = reverse( 'admin:index', current_app=self.admin_site.name ) return HttpResponseRedirect(post_url)
def response_change(self, request, obj): """ Override of `ModelAdmin.response_change` to detect the FSM button that was clicked in the submit row and perform the state transition. """ if not getattr(obj, '_fsmtransition_results', None): return super(FSMTransitionMixin, self).response_change(request, obj) if obj._fsmtransition_results['status'] == messages.SUCCESS: msg = _('%(obj)s successfully set to %(new_state)s' ) % obj._fsmtransition_results else: msg = _('Error! %(obj)s failed to %(transition)s' ) % obj._fsmtransition_results self.message_user(request, msg, obj._fsmtransition_results['status']) opts = self.model._meta redirect_url = self.get_redirect_url(request=request, obj=obj) preserved_filters = self.get_preserved_filters(request) redirect_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, redirect_url) return HttpResponseRedirect(redirect_url)
def response_archive(self, request, obj_display, obj_id): opts = self.model._meta self.message_user( request, _("The {name} \"{obj}\" was archived successfully.").format( name=opts.verbose_name, obj=obj_display ), messages.SUCCESS ) if self.has_change_permission(request, None): url_name = "admin:%s_%s_changelist" % self.url_info post_url = urlresolvers.reverse( url_name, current_app=self.admin_site.name ) preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters( {'preserved_filters': preserved_filters, 'opts': opts}, post_url ) else: post_url = urlresolvers.reverse( "admin:index", current_app=self.admin_site.name ) return http.HttpResponseRedirect(post_url)
def response_change(self, request, obj): """ Determines the HttpResponse for the change_view stage. """ if '_activate' in request.POST: try: obj.activate_provider() except ValidationError as e: msg = _("Unable to activate user '{email}': {error}.") msg = msg.format(name=obj.email, error=validation_error_as_text(e)) self.message_user(request, msg, messages.ERROR) redirect_url = add_preserved_filters( { 'preserved_filters': self.get_preserved_filters(request), 'opts': self.model._meta }, request.path) return HttpResponseRedirect(redirect_url) else: msg = _( 'The account was activated successfully. Email has been sent to user.' ) self.message_user(request, msg, messages.SUCCESS) return super().response_change(request, obj)
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None): """ Insert the language tabs. """ if self._has_translatable_model(): lang_code = self.get_form_language(request, obj) lang = get_language_title(lang_code) available_languages = self.get_available_languages(obj) language_tabs = self.get_language_tabs(request, obj, available_languages) context['language_tabs'] = language_tabs if language_tabs: context['title'] = '%s (%s)' % (context['title'], lang) if not language_tabs.current_is_translated: add = True # lets prepopulated_fields_js work. # Patch form_url to contain the "language" GET parameter. # Otherwise AdminModel.render_change_form will clean the URL # and remove the "language" when coming from a filtered object # list causing the wrong translation to be changed. params = request.GET.dict() params['language'] = lang_code form_url = add_preserved_filters({ 'preserved_filters': urlencode(params), 'opts': self.model._meta }, form_url) # django-fluent-pages uses the same technique if 'default_change_form_template' not in context: context['default_change_form_template'] = self.default_change_form_template #context['base_template'] = self.get_change_form_base_template() return super(TranslatableAdmin, self).render_change_form(request, context, add, change, form_url, obj)
def _get_post_objecttool_url(self, request): """get redirect url after complete objecttool action""" rv = request.META.get("HTTP_REFERRER") if not rv: opts = self.model._meta obj_id = resolve(request.path).kwargs.get("object_id") if obj_id: url_name = "admin:%s_%s_change" % ( opts.app_label, opts.model_name) try: post_url = reverse( url_name, current_app=self.admin_site.name, kwargs=dict(object_id=obj_id)) except NoReverseMatch: post_url = reverse( url_name, current_app=self.admin_site.name, args=(obj_id,)) else: post_url = reverse("admin:%s_%s_changelist" % (opts.app_label, opts.model_name), current_app=self.admin_site.name) preserved_filters = self.get_preserved_filters(request) rv = add_preserved_filters( {'preserved_filters': preserved_filters, 'opts': opts}, post_url ) return rv
def response_delete(self, request, obj_display, obj_id): opts = self.model._meta self.message_user( request, _("The {name} \"{obj}\" was archived successfully.").format( name=opts.verbose_name, obj=obj_display ), messages.SUCCESS ) if self.has_change_permission(request, None): url_name = "admin:%s_%s_changelist" % self.url_info post_url = urlresolvers.reverse( url_name, current_app=self.admin_site.name ) preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters( {'preserved_filters': preserved_filters, 'opts': opts}, post_url ) else: post_url = urlresolvers.reverse( "admin:index", current_app=self.admin_site.name ) return http.HttpResponseRedirect(post_url)
def render_object_action_form(self, request, context, form_url='', obj=None, action=None): opts = self.model._meta preserved_filters = self.get_preserved_filters(request) form_url = add_preserved_filters( { 'preserved_filters': preserved_filters, 'opts': opts }, form_url) view_on_site_url = self.get_view_on_site_url(obj) context.update({ 'add': False, 'change': True, 'has_add_permission': self.has_add_permission(request), 'has_change_permission': self.has_change_permission(request, obj), 'has_delete_permission': self.has_delete_permission(request, obj), 'has_file_field': True, # FIXME - this should check if form or formsets have a FileField, 'has_absolute_url': view_on_site_url is not None, 'absolute_url': view_on_site_url, 'form_url': form_url, 'opts': opts, 'content_type_id': get_content_type_for_model(self.model).pk, 'save_as': False, 'save_on_top': self.save_on_top, 'to_field_var': None, 'is_popup_var': None, 'app_label': opts.app_label, }) form_template = self.get_object_action_form_template( request, obj, action) request.current_app = self.admin_site.name return TemplateResponse( request, form_template or [ 'admin/{}/{}/object_action_form.html'.format( opts.app_label, opts.model_name), 'admin/{}/object_action_form.html'.format(opts.app_label), 'admin/object_action_form.html', ], context)
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None): """ Insert the language tabs. """ if self._has_translatable_model(): lang_code = self.get_form_language(request, obj) lang = get_language_title(lang_code) available_languages = self.get_available_languages(obj) language_tabs = self.get_language_tabs(request, obj, available_languages) context['language_tabs'] = language_tabs if language_tabs: context['title'] = '%s (%s)' % (context['title'], lang) if not language_tabs.current_is_translated: add = True # lets prepopulated_fields_js work. # Patch form_url to contain the "language" GET parameter. # Otherwise AdminModel.render_change_form will clean the URL # and remove the "language" when coming from a filtered object # list causing the wrong translation to be changed. params = request.GET.dict() params['language'] = lang_code form_url = add_preserved_filters({ 'preserved_filters': urlencode(params), 'opts': self.model._meta }, form_url) # django-fluent-pages uses the same technique if 'default_change_form_template' not in context: context['default_change_form_template'] = self.default_change_form_template #context['base_template'] = self.get_change_form_base_template() return super(TranslatableAdmin, self).render_change_form(request, context, add, change, form_url, obj)
def publisher_view(self, request, extra_context=None): action = request.GET.get('action', None) if action not in ('sync', 'pending', 'changed', 'all', ): return HttpResponseBadRequest() if action == 'sync': sync_pages.delay() elif action == 'pending': publish_pending.delay() elif action == 'changed': publish_changed.delay() elif action == 'all': publish_pages.delay() opts = self.model._meta preserved_filters = self.get_preserved_filters(request) msg = _('Your request is processing in the background. ' 'Please check the "Publish History" for updates.') self.message_user(request, msg, messages.SUCCESS) if self.has_change_permission(request, None): redirect_url = reverse('admin:%s_%s_changelist' % (opts.app_label, opts.model_name), current_app=self.admin_site.name) else: # pragma: no cover redirect_url = reverse('admin:index', current_app=self.admin_site.name) redirect_url = add_preserved_filters( {'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url)
def response_add(self, request, obj, post_url_continue=None): opts = obj._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) msg_dict = {"name": force_text(opts.verbose_name), "obj": force_text(obj)} if IS_POPUP_VAR in request.POST: to_field = request.POST.get(TO_FIELD_VAR) if to_field: attr = str(to_field) else: attr = obj._meta.pk.attname value = obj.serializable_value(attr) return SimpleTemplateResponse( "admin/popup_response.html", { "pk_value": escape(pk_value), # for possible backwards-compatibility "value": escape(value), "obj": escapejs(obj), }, ) elif "_continue" in request.POST: msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) if post_url_continue is None: post_url_continue = reverse( "admin:%s_change" % self.get_base_viewname(), args=(quote(self.parent_instance.pk), quote(pk_value)), current_app=self.admin_site.name, ) post_url_continue = add_preserved_filters( {"preserved_filters": preserved_filters, "opts": opts}, post_url_continue ) return HttpResponseRedirect(post_url_continue) elif "_addanother" in request.POST: msg = _('The %(name)s "%(obj)s" was added successfully. You may add another %(name)s below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.path redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url) return HttpResponseRedirect(redirect_url) else: msg = _('The %(name)s "%(obj)s" was added successfully.') % msg_dict self.message_user(request, msg, messages.SUCCESS) return self.response_post_save_add(request, obj)
def response_change(self, request, obj): opts = self.model._meta preserved_filters = self.get_preserved_filters(request) if "_newsegment" in request.POST: redirect_url = request.path redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url + '#add_segment') return super(BillAdmin, self).response_change(request, obj)
def response_post_save_add(self, request, obj): opts = self.model._meta if self.has_change_permission(request, None): post_url = self.reverse_url("changelist", quote(self.parent_instance.pk)) preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, post_url) else: post_url = reverse("admin:index", current_app=self.admin_site.name) return HttpResponseRedirect(post_url)
def mass_change_selected(modeladmin, request, queryset): selected = queryset.values_list('pk', flat=True) redirect_url = get_mass_change_redirect_url(modeladmin.model._meta, selected, request.session) redirect_url = add_preserved_filters( {'preserved_filters': modeladmin.get_preserved_filters(request), 'opts': queryset.model._meta}, redirect_url) return HttpResponseRedirect(redirect_url)
def response_post_save_change(self, request, obj): """ save redirect to object history """ if "edit" in request.GET.urlencode(): opts = obj.content_type.model_class()._meta view = "admin:%s_%s_history" % (opts.app_label, opts.model_name) post_url = reverse(view, args=(obj.object_id,)) preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, post_url) return HttpResponseRedirect(post_url) return super(LogEntryAdmin, self).response_post_save_change(request, obj)
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None): # Include a 'base_change_form_template' in the context, make it easier to extend context.update({ 'base_change_form_template': self.base_change_form_template, 'default_change_form_template': _lazy_get_default_change_form_template(self), 'ct_id': int(ContentType.objects.get_for_model(obj).pk if change else request.GET['ct_id']) # HACK for polymorphic admin }) # django-parler does this, so we have to do it too, affects django>=1.6 form_url = add_preserved_filters({'preserved_filters': urlencode({'ct_id': context['ct_id']}), 'opts': self.model._meta}, form_url) return super(DefaultPageChildAdmin, self).render_change_form(request, context, add=add, change=change, form_url=form_url, obj=obj)
def response_change(self, request, obj): """ Determines the HttpResponse for the change_view stage. """ opts = self.model._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)} if "_continue" in request.POST: msg = _('The %(name)s "%(obj)s" was changed successfully. You may edit it again below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.prefix + request.path redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) elif "_saveasnew" in request.POST: msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.prefix + reverse( 'admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(pk_value,), current_app=self.admin_site.name ) redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) elif "_addanother" in request.POST: msg = _('The %(name)s "%(obj)s" was changed successfully. You may add another %(name)s below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.prefix + reverse( 'admin:%s_%s_add' % (opts.app_label, opts.model_name), current_app=self.admin_site.name ) redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) else: msg = _('The %(name)s "%(obj)s" was changed successfully.') % msg_dict self.message_user(request, msg, messages.SUCCESS) # Redirect to previous url return HttpResponseRedirect("%s%s" % (request.prefix, request.session['crumbs'][request.prefix][-2][2]))
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None): # Include a 'base_change_form_template' in the context, make it easier to extend # the ct_id parameter can be skipped when the direct URL is used (instead of the proxied polymorphic add view) context.update({ 'base_change_form_template': self.base_change_form_template, 'default_change_form_template': _lazy_get_default_change_form_template(self), 'ct_id': int(ContentType.objects.get_for_model(obj).pk if change else request.GET.get('ct_id', 0)) # HACK for polymorphic admin }) # django-parler does this, so we have to do it too form_url = add_preserved_filters({'preserved_filters': urlencode({'ct_id': context['ct_id']}), 'opts': self.model._meta}, form_url) return super(DefaultPageChildAdmin, self).render_change_form(request, context, add=add, change=change, form_url=form_url, obj=obj)
def return_url(self): opts = self.model._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) redirect_url = reverse('admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(pk_value,), current_app=self.admin_site.name) redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url)
def get_login_redirect(self, provider, account): """Return url to redirect authenticated users.""" info = self.model._meta.app_label, self.model._meta.model_name # inline import to prevent circular imports. from .admin import PRESERVED_FILTERS_SESSION_KEY preserved_filters = self.request.session.get(PRESERVED_FILTERS_SESSION_KEY, None) redirect_url = reverse('admin:%s_%s_changelist' % info) if preserved_filters: redirect_url = add_preserved_filters( {'preserved_filters': preserved_filters, 'opts': self.model._meta}, redirect_url) return redirect_url
def response_change(self, request, obj): ''' Override of `ModelAdmin.response_change` to detect the FSM button that was clicked in the submit row and perform the state transtion. ''' # Each transition button is named with the transition. # e.g. _fsmtransition-publish # _fsmtransition-delete transition_key = [k for k in request.POST.keys() if k.startswith("_fsmtransition")] if not transition_key: return super(FSMTransitionMixin, self).response_change(request, obj) # Extract the function name from the transition key transition = transition_key[0].split('-')[1] original_state = getattr(obj, self.fsm_field) msg_dict = { 'obj': force_text(obj), 'transition': transition, } # Ensure the requested transition is availble transitions = self._fsm_get_transitions(obj) available = any([t.name == transition for t in transitions]) trans_func = getattr(obj, transition, None) if available and trans_func: # Run the transition try: #Attempt to pass in the by argument if using django-fsm-log trans_func(by=request.user) except TypeError: #If the function does not have a by attribute, just call with no arguments trans_func() # The transition may not be marked to automatically save, so # we assume that it should always be saved. obj.save() new_state = getattr(obj, self.fsm_field) # Done! Log the change and message user self.log_state_change(obj, request.user.id, original_state, new_state) msg_dict.update({'new_state': new_state}) msg = _('%(obj)s successfully set to %(new_state)s') % msg_dict self.message_user(request, msg, messages.SUCCESS) else: msg = _('Error! %(obj)s failed to %(transition)s') % msg_dict self.message_user(request, msg, messages.ERROR) opts = self.model._meta redirect_url = self.get_redirect_url(request=request, obj=obj) preserved_filters = self.get_preserved_filters(request) redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url)
def response_add(self, request, obj, post_url_continue=None): """ Determines the HttpResponse for the add_view stage. """ opts = obj._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)} # Here, we distinguish between different save types by checking for # the presence of keys in request.POST. if "_popup" in request.POST: return SimpleTemplateResponse('admin/popup_response.html', { 'pk_value': escape(pk_value), 'obj': escapejs(obj) }) elif "_continue" in request.POST: msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) if post_url_continue is None: post_url_continue = request.prefix + reverse( 'admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(pk_value,), current_app=self.admin_site.name ) post_url_continue = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, post_url_continue) return HttpResponseRedirect(post_url_continue) elif "_addanother" in request.POST: msg = _('The %(name)s "%(obj)s" was added successfully. You may add another %(name)s below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.prefix + request.path redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) else: msg = _('The %(name)s "%(obj)s" was added successfully.') % msg_dict self.message_user(request, msg, messages.SUCCESS) # Redirect to previous url return HttpResponseRedirect("%s%s" % (request.prefix, request.session['prev'][request.prefix][0]))
def response_post_save_change(self, request, obj): from django.http import HttpResponseRedirect from django.contrib.admin.templatetags.admin_urls import add_preserved_filters from django.core.urlresolvers import reverse from django.template.loader import get_template from django.template.response import TemplateResponse if request.POST.get('filter_previous') and request.POST.get('filter_previous') == 'on': if request.POST.get('post'): opts = self.model._meta if self.has_change_permission(request, None): post_url = reverse('admin:{}_{}_changelist'.format(opts.app_label, opts.model_name), current_app=self.admin_site.name) preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, post_url) else: post_url = reverse('admin:index', current_app=self.admin_site.name) return HttpResponseRedirect(post_url) if not request.POST.get('post'): context = { 'title': "Filter Previous Confirmation", 'formset': request.POST, 'request': request, } confirmation_page = get_template('djfulcrum/confirmation.html') return TemplateResponse(request, confirmation_page, context, current_app=self.admin_site.name) else: opts = self.model._meta if self.has_change_permission(request, None): post_url = reverse('admin:{}_{}_changelist'.format(opts.app_label, opts.model_name), current_app=self.admin_site.name) preserved_filters = self.get_preserved_filters(request) post_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, post_url) else: post_url = reverse('admin:index', current_app=self.admin_site.name) return HttpResponseRedirect(post_url)
def response_change(self, request, obj): opts = self.model._meta pk_value = obj._get_pk_val() preserved_filters = self.get_preserved_filters(request) msg_dict = {"name": force_text(opts.verbose_name), "obj": force_text(obj)} if "_continue" in request.POST: msg = _(u'The %(name)s "%(obj)s" was changed successfully. You may edit it again below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = request.path redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url) return HttpResponseRedirect(redirect_url) elif "_saveasnew" in request.POST: msg = _(u'The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = reverse( "admin:%s_change" % self.get_base_viewname(), args=(quote(self.parent_instance.pk), quote(pk_value)), current_app=self.admin_site.name, ) redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url) return HttpResponseRedirect(redirect_url) elif "_addanother" in request.POST: msg = _(u'The %(name)s "%(obj)s" was changed successfully. You may add another %(name)s below.') % msg_dict self.message_user(request, msg, messages.SUCCESS) redirect_url = reverse( "admin:%s_add" % self.get_base_viewname(), args=(quote(self.parent_instance.pk),), current_app=self.admin_site.name, ) redirect_url = add_preserved_filters({"preserved_filters": preserved_filters, "opts": opts}, redirect_url) return HttpResponseRedirect(redirect_url) else: msg = _(u'The %(name)s "%(obj)s" was changed successfully.') % msg_dict self.message_user(request, msg, messages.SUCCESS) return self.response_post_save_change(request, obj)
def response_change(self, request, obj): opts = self.model._meta preserved_filters = self.get_preserved_filters(request) msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj.title)} pk_value = obj._get_pk_val() if '_preview' in request.POST: redirect_url = request.path + '?preview=true' redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) elif '_publish' in request.POST: msg = _('You published the %(name)s %(obj)s!') % msg_dict self.message_user(request, msg, messages.SUCCESS, extra_tags='safe') return self.response_post_save_change(request, obj) elif "_continue" in request.POST: msg = _('The %(name)s %(obj)s was changed successfully. You may edit it again below.') % msg_dict self.message_user(request, msg, messages.SUCCESS, extra_tags='safe') redirect_url = request.path redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url) return HttpResponseRedirect(redirect_url) else: return super(TaskForAdmin, self).response_change(request, obj)
def add_view(self, request, form_url='', extra_context=None): type_value = int(request.GET.get('type', 0)) if not type_value: return self.add_type_view(request) else: real_admin = self._get_real_admin(type_value) form_url = add_preserved_filters({ 'preserved_filters': urlencode({'type': type_value}), 'opts': self.model._meta}, form_url ) return real_admin.add_view(request, form_url, extra_context)