开发者

overriding methods of ModelAdmin

开发者 https://www.devze.com 2023-04-06 13:10 出处:网络
I am working on a Django project where any time an admin does something in the admin console (CRUD), a set of people gets notified.I was pointed to three methods on ModelAdmin called log_addition, log

I am working on a Django project where any time an admin does something in the admin console (CRUD), a set of people gets notified. I was pointed to three methods on ModelAdmin called log_addition, log_created and log_deleted which save all the necessary info into a special database called "django_admin_log".

I placed the following code into my admin.py:

class ModelAdmin(admin.ModelAdmin):
    def log_addition(self, request, object):
      subject = 'admin test of creation'
      message = 'admin creation detected'
      from_addr = 'no_reply@example.com'
      recipient_list = ('luka@example.com',)
      send_mail(subject, message, from_addr, recipient_list)

      return super(ModelAdmin, self).log_addition( *args, **kwargs )

This code 开发者_如何学JAVAhowever, gets ignored when I create new users. Many posts actually recommend to create a different class name (MyModelAdmin) and I am not entirely sure why - the point is to override the existing model. I tried it, but with the same result. Can anyone point me in the right direction please? How exactly do you override a method of an existing class and give it some extra functionality? Thank you! Luka

EDIT: I figured it out, it seems that I had to unregister and re-register User for my change to work.


remove the return at the end.

If that doesn't work, you can instead put the code in a function called add_view:

class ModelAdmin(admin.ModelAdmin):
    add_view(self, request):
        ...
        super(ModelAdmin, self).add_view( *args, **kwargs)

This function can be overwritten to add functionality to the admin's view. If you look at the admin code:

https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/options.py#L923

you will see that the function you have tried to overwrite is called from within the add_view function so you could equally put the code here

0

精彩评论

暂无评论...
验证码 换一张
取 消