переопределяющие методы ModelAdmin - PullRequest
1 голос
/ 20 сентября 2011

Я работаю над проектом Django, где каждый раз, когда администратор что-то делает в консоли администратора (CRUD), множество людей получает уведомление. Мне было указано на три метода ModelAdmin, которые называются log_addition, log_created и log_deleted, которые сохраняют всю необходимую информацию в специальную базу данных с именем "django_admin_log".

Я поместил следующий код в мой 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 )

Этот код, однако, игнорируется при создании новых пользователей. Во многих публикациях на самом деле рекомендуется создавать другое имя класса (MyModelAdmin), и я не совсем уверен, почему - дело в том, чтобы переопределить существующую модель. Я попробовал, но с тем же результатом. Кто-нибудь может указать мне правильное направление, пожалуйста? Как именно вы переопределяете метод существующего класса и наделяете его дополнительной функциональностью? Спасибо! Luka

РЕДАКТИРОВАТЬ: я понял, кажется, что мне пришлось отменить регистрацию и перерегистрацию пользователя для моего изменения на работу.

1 Ответ

2 голосов
/ 20 сентября 2011

удалить return в конце.

Если это не сработает, вместо этого вы можете поместить код в функцию с именем add_view :

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

Эта функция может быть перезаписана для добавления функциональности в представление администратора. Если вы посмотрите на код администратора:

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

вы увидите, что функция, которую вы пытались перезаписать, вызывается из функции add_view, чтобы вы могли в равной степени поместить код здесь

...