Django Admin Remove default save message

1.9k Views Asked by At

I have added this extra message in my model admin and basically I want to remove the default one. Is there someone that can help me to do this?

My actual message:

def save_model(self, request, obj, form, change):
    messages.Success(request, "...")
    obj.save()

The default one kinda sucks!

Thank you!

default

3

There are 3 best solutions below

0
On

Not the most elegant solution, but you can always override the response_add and response_change methods of the ModelAdmin class, removing the self.message_user calls, and if you don't want all that clutter on your admin.py file, you can just create a SilentModelAdmin in a helper file where you override those methods and remove the messages you don't want to be shown.

0
On

I solved this problem as follow, although it's not very elegant but it work:

from django.contrib import messages
from django.contrib import admin

# Register your models here.
from . import models


class RemoveAdminDefaultMessageMixin:

    def remove_default_message(self, request):
        storage = messages.get_messages(request)
        try:
            del storage._queued_messages[-1]
        except KeyError:
            pass
        return True

    def response_add(self, request, obj, post_url_continue=None):
        """override"""
        response = super().response_add(request, obj, post_url_continue)
        self.remove_default_message(request)
        return response

    def response_change(self, request, obj):
        """override"""
        response = super().response_change(request, obj)
        self.remove_default_message(request)
        return response

    def response_delete(self, request, obj_display, obj_id):
        """override"""
        response = super().response_delete(request, obj_display, obj_id)
        self.remove_default_message(request)
        return response


class MessageAdmin(RemoveAdminDefaultMessageMixin, admin.ModelAdmin):

    def save_model(self, request, obj, form, change):
        self.message_user(request, 'save success!')
        return super().save_model(request, obj, form, change)


admin.site.register(models.Message, MessageAdmin)
0
On

With messages.set_level(), you can remove the default message then set your custom message separately and differently for adding or changing an object as shown below:

def save_model(self, request, obj, form, change): # Here
    last_part_of_path = request.path.split('/')[-2]

    if last_part_of_path == "add":
        obj.save()
        
        messages.set_level(request, messages.SUCCESS)
        messages.success(request, "Successfully added!!")

    if last_part_of_path == "change":
        obj.save()

        messages.set_level(request, messages.SUCCESS)
        messages.success(request, "Successfully changed!!")