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?