某个字段修改,记录下修改人 修改前后的值, 现在我在 ModelForm clean 函数里处理了下,感觉 。。。。挺蛋疼的。
class SynthesisStepForm(BootstrapModelForm):
class Meta:
model = SynthesisStep
fields = ('title', 'version', 'condition', 'yield_rate', 'testing', 'stype')
widgets = {
'testing': forms.Textarea(attrs={'rows': '4', 'cols': '100', 'style': 'width:auto;'}),
'condition': forms.Textarea(attrs={'rows': '4', 'cols': '100', 'style': 'width:auto;'})
}
def clean(self):
"""
用于监控字段被修改
:return:
"""
update_fields = ('title', 'version', 'condition', 'yield_rate', 'testing', 'stype')
cleaned_data = super(BootstrapModelForm, self).clean()
update_note = supervisory_update_fields(self, cleaned_data, update_fields)
self._update_note = update_note
return cleaned_data
def supervisory_update_fields(form_obj, cleaned_data, update_fields):
"""
用于监控 form 提交字段的变化
:param form_obj:
:param cleaned_data:
:param update_fields:
:return:
"""
update_note = ''
if form_obj.instance.pk: # new instance only
changed_data = form_obj.changed_data
for data in changed_data:
if data in update_fields:
try:
old_field = eval('form_obj.instance.{0}'.format(data))
new_field = cleaned_data[data]
if old_field != new_field:
update_note = update_note + '{2} is modified , from "{0}" to "{1}"\n'.format(old_field,new_field, data)
except Exception as e:
pass
return update_note
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.