django 有没有什么监控 model 字段修改的插件。

2019-07-29 15:02:31 +08:00
 gavin3318

某个字段修改,记录下修改人 修改前后的值, 现在我在 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

1772 次点击
所在节点    Python
3 条回复
izoabr
2019-07-29 15:49:26 +08:00
内容版本管理,我记得有好几个现成的,刚搜了一下:
AuditTrail
django-reversion
noobsheldon
2019-07-29 16:20:22 +08:00
django signal
37Y37
2019-07-29 18:49:26 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/587170

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX