2011-09-19 74 views
1

我正在研究一個Django項目,任何時候管理員在管理控制檯(CRUD)中執行某些操作時,都會收到一組人員的通知。我被指向ModelAdmin上的三種稱爲log_addition,log_created和log_deleted的方法,它們將所有必需的信息保存到名爲「django_admin_log」的特殊數據庫中。重寫ModelAdmin的方法

我把下面的代碼到我的admin.py:

class ModelAdmin(admin.ModelAdmin): 
    def log_addition(self, request, object): 
     subject = 'admin test of creation' 
     message = 'admin creation detected' 
     from_addr = '[email protected]' 
     recipient_list = ('[email protected]',) 
     send_mail(subject, message, from_addr, recipient_list) 

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

此代碼然而,當我創建新用戶被忽略。許多帖子實際上建議創建一個不同的類名(MyModelAdmin),我不完全確定爲什麼 - 重點是覆蓋現有的模型。我試過了,但結果相同。任何人都可以指出我正確的方向嗎?如何重寫現有類的方法並給它一些額外的功能? 謝謝! Luka

編輯:我想通了,似乎我不得不取消註冊,並重新註冊用戶爲我的變化工作。

回答

2

最後刪除返回

如果不工作,你可以改爲將代碼放在一個名爲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函數中調用,所以你同樣可以把代碼在這裏

+1

其實,我不不想重載add_view,因爲它專門使用這三種方法中的一種,所以我寧願直接覆蓋這些方法。正如我剛剛發現它,我需要以下:'admin.site.unregister(用戶) admin.site.register(用戶,MyModelAdmin)',然後我的功能踢。然而,一個奇怪的副作用踢在 - 我的管理控制檯丟失了一堆幫助者的東西,如過濾器視圖等,但功能仍然完好無損。 – Lukich