我想查看更改的数据,如果有任何字段已更改,我想将其邮寄给管理员电子邮件。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
。我怎样才能克服这个问题?
当数据保存在数据库中时发送电子邮件没有更多的意义,而不是在表单中更改?看起来像垃圾邮件机器; ;-) –
'changed_data'是相对于Django中的'initial',每个字段在用户呈现表单时的值。当你实例化你的Form时,你可以提供'initial'(如果对象已经存在,Django会自动为你执行'ModelForm')。如果您不提供'initial',则所有字段都将被视为已更改。 –