Django Admin:检测对象字段的子集是否已更改以及哪些对象字段已更改

我需要检测管理员中某些模型的某些字段何时发生了变化,以便稍后根据更改的字段和这些字段的上一个/当前值发送通知.

我尝试使用ModelForm并覆盖save()方法,但表单的self.cleaned_data和seld.instance已经具有字段的新值.

修改上面的答案……从Dominik Szopa获取精彩功能并更改它将解决您的关系变化检测:使用此:

def get_changes_between_models(model1, model2, excludes = []):
    changes = {}
    for field in model1._meta.fields:
        if not (field.name in excludes):
            if field.value_from_object(model1) != field.value_from_object(model2):
                changes[field.verbose_name] = (field.value_from_object(model1),
                                                   field.value_from_object(model2))
    return changes

然后在你的代码中你可以说(避免尝试/除了性能原因):

if (self.id):
    old = MyModel.Objects.get(pk=self.id)
    changes = get_changes_between_models(self, old)

    if (changes):
        # Process based on what is changed.

如果您在“模型”级别执行此操作,则无法保存额外查询.到达“保存”点时,数据已经更改.我的第一篇文章,请原谅我,如果我听起来像个白痴.

相关文章
相关标签/搜索