【发布时间】:2022-01-12 01:20:09
【问题描述】:
我一直在四处寻找,但我认为我还没有找到答案。但我希望能够找到数据的差异,并有一个列名列表来表明这一点。
例如,我有一个名为 my_model 的模型,它有一些列。
object = my_model.objects.get(id=1)
# Perform edit some values.
old_object = my_model.objects.get(id=1)
object.save()
# Check for differences
model_fields = [field.name for field in my_model._meta.get_fields()]
filtered_list = filter(lambda field: getattr(object, field, None) != getattr(old_object, field, None), model_fields)
这样做的目的是在用户进行更新后通知用户,以便向该用户发送电子邮件,提醒他们他们更改了所更改的任何值。
【问题讨论】:
-
库
django-simple-history可能对您有用。 -
@RossRogers 我确实看到了,我的问题是这会增加处理时间的开销有多大?
-
django-simple-history添加了一个包含所有相同字段的并行表,以及一些历史字段,如history_time、history_edit、history_user、history_change_reason。当您查看差异时,您查询该审计表,与您的普通表完全分开。您可以像Foo.history.filter(id=42, history_time_gte='2021-12-06-19:30')等一样访问它。无论如何,单独的数据,所以超过两倍的数据大小。取决于您的要求,但我发现它很容易。想要审计表?history = HistoricalRecords()在那个模型上,然后砰!完成。
标签: python python-3.x django django-models