2012-07-19 51 views
1

您好,我想知道是否有某種方法可以在有人更新Django管理頁面中某些字段的更新時向用戶發送電子郵件。有沒有辦法做到這一點?我已經在表單填寫完成後發送了一封電子郵件,但是一旦有一位用戶通過管理頁面進行更新,我需要發送更多電子郵件。從管理頁面(Django)更新模型後發送電子郵件

我看了一下post_save,model_save和save_formset方法,但我並不覺得他們是我在找的東西。

回答

3

嘗試覆蓋ModelAdmin.save_model方法。我認爲它已經涵蓋了你需要的所有信息。

change變量可讓您區分添加或更改模型實例的用戶。

form.changed_data爲您提供了已更改字段的名稱列表,讓您確定是否發送電子郵件。

最後request.user標識進行更改的用戶。

+0

save_models奇妙地工作。當我第一次看到它時,我並不認爲它有用,但它正是我所需要的! – CF711 2012-07-19 18:08:19

1

您需要django.db.models.signals.post_save信號。保存模型後進行打磨。

def my_callback(sender, **kwargs): 
    # Your specific logic here 
    pass 

post_syncdb.connect(my_callback, sender=yourapp.models.TheModel) 

參數與該信號發送:

  • 發件人: 模型類。
  • 實例: 正在保存的實際實例。
  • 創建 一個布爾;如果創建了新記錄,則爲true。
  • raw: 一個布爾;如果模型完全按照提供的方式保存(即加載燈具時),則爲真。不應該查詢/修改數據庫中的其他記錄,因爲數據庫可能還沒有處於一致的狀態。

所以你只需要回撥和發件人。

+0

'post_save'信號爲您提供正在保存的實例 - 但我不認爲有可能知道哪些字段已更改。你也許可以使用'pre_save'信號,但是重寫模型管理'save_model'方法可能更容易。 – Alasdair 2012-07-19 20:05:32

+0

但有些骯髒。幾乎所有可以通過重寫'save'方法解決的保存問題,但是Django都有封裝的方法來解決特定的問題。使用專門致力於解決問題的方法,可以在「save」方法中防止「報紙」。 – I159 2012-07-20 07:11:25

+0

並確定你對'pre_save' – I159 2012-07-20 07:12:33