2012-09-19 74 views
2

我想查看更改的數據,如果有任何字段已更改,我想將其郵寄給管理員電子郵件。Django表單獲取更改字段

這裏是我的代碼:

def send_change_email(changed_data, cleaned_data, merchant): 
    changed_stuff = {} 
    for key in changed_data: 
     changed_stuff[key] = cleaned_data[key] 
    rendered = render_to_string('model_change.txt', {'changed_stuff':changed_stuff, 'merchant':merchant }) 
    send_mail('Model Change!', rendered, '[email protected]', ['[email protected]'])  

class FooForm(forms.Form): 
    field_1 = forms.CharField() 
    field_2 = forms.CharField() 

    def clean(self): # Here I test if any field is changed, if so, mail to them 
     if self.is_valid() and self.changed_data: 
      send_change_email(self.changed_data, self.cleaned_data, None) 
     return self.cleaned_data  

的問題是,我總是領域的完整列表,當我嘗試self.changed_data。我怎樣才能克服這個問題?

+0

當數據保存在數據庫中時發送電子郵件沒有更多的意義,而不是在表單中更改?看起來像垃圾郵件機器; ;-) –

+0

'changed_data'是相對於Django中的'initial',每個字段在用戶呈現表單時的值。當你實例化你的Form時,你可以提供'initial'(如果對象已經存在,Django會自動爲你執行'ModelForm')。如果您不提供'initial',則所有字段都將被視爲已更改。 –

回答

0

也許你可以試試這個snippet,如果問題依然存在,你可能在初始化或提交表單時遇到問題。

+0

前一個鏈接不再有效。 –

+0

如果你在模型表單上使用它,它會正常工作,我測試過了。 self.changed_data僅包含已更改的字段。我唯一遇到的問題是FileBrowserField(django-filebrowser),它似乎每次都會更新。 – radtek