2012-09-19 5 views
2

변경된 데이터를보고 싶은데 필드가 변경된 경우 관리자 전자 메일로 보내고 싶습니다. 내가 self.changed_data을하려고 할 때장고 양식 변경된 필드가

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  

문제는, 내가 항상 필드의 전체 목록을 보려면 :

여기 내 코드입니다. 이 문제를 어떻게 극복 할 수 있습니까?

+0

데이터가 db에 저장되고 양식에서 변경되지 않았을 때 전자 메일을 보내는 것이 더 합리적이지 않습니까? 내게 스팸 메일처럼 보입니다. ;-) –

+0

'changed_data'는 장고에서'initial'에 상대적입니다. 사용자가 폼을 보여줄 때 각 필드의 값입니다. Form을 인스턴스화 할 때'initial'을 제공 할 수 있습니다. (객체가 이미 존재하면 Django가 자동으로'ModelForm'에 대해이 작업을 수행합니다). 'initial'을 제공하지 않으면 모든 필드가 변경된 것으로 간주됩니다. –

답변

0

어쩌면이 snippet을 시도해 볼 수 있으며 문제가 지속되면 양식을 초기화하거나 제출하는 데 문제가있을 수 있습니다.

+0

이전 링크는 더 이상 활성화되지 않습니다. –

+0

모델 양식에 사용하면 제대로 작동하므로 테스트 해 보았습니다. self.changed_data에는 변경된 필드 만 포함되었습니다. 유일한 문제는 매번 변경된 것으로보고되는 FileBrowserField (django-filebrowser)입니다. – radtek