Skip to content
Advertisement

Override (save_model) in django admin for All models/apps in projects

How could I implement override save method for all models in all Apps inside Admin panel?

def save_model(self, request, obj, form, change):
    
    pass

I can implement it in one or two models “inherit and adding it in register method”, but I really need it to execute whenever admin clicks save in Admin panel and implement some code before save.

Advertisement

Answer

In my team we already overridden ModelAdmin class. Answer depends on your project.

In examples i use old python super() sintaxis, it helps to debug the code.

Easy way with class. Create somewhere in project

from django.contrib.admin import ModelAdmin:

Class ModelAmin(ModelAdmin):
    def save_model(self, *args, **kwargs):
        # do some staff before
        super(ModelAdmin, self).save_model(*args, **kwargs)
        # do some staff after

Everywhere in project made find from django.contrib.admin import ModelAdmin replace to from module.with.myModelAdmin import ModelAdmin.

All next ModelAdmins you should build with your ModelAdmin.

Second way with ModelAdminMixin. Code is fast the same. Somethere put mixin:

Class ModelAminMixin:
    def save_model(self, *args, **kwargs):
        # do some staff before
        super(ModelAdminMixin, self).save_model(*args, **kwargs)
        # do some staff after

Everywhere in project made find with regexp class BlaBlaBla(bla, bla, ModelAdmin): and replace to class BlaBlaBla(bla, bla, ModelAdminMixin, ModelAdmin):.

All next ModelAdmins you should build with inheritance from ModelAdminMixin and ModelAdmin. This is a little bit more flexible: you can decide add or not this mixin.

Next Way – MonkeyPatching.

Somethere put your mixin from “second way”. Somethere in admin.py:

from django.contrib.admin import ModelAdmin.
from module.with.myModelAdminMixin import ModelAdminMixin

ModelAdmin.__bases__ = (ModelAdminMixin,) + ModelAdmin.__bases__

After that you should not do something else. But it is a wrong way to code. Is “monkey patching” really that bad?

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement