如何使用django-simple-history获取指定用户对所有注册模型的全部变更记录
结论
可以查询到该用户对所有已注册历史模型的全部变更操作。
实现原理
你已经配置了simple_history.middleware.HistoryRequestMiddleware,该中间件会自动将当前请求对应的用户绑定到所有历史变更记录的history_user字段上,所有注册了HistoricalRecords的模型的历史表都会默认携带该字段。
具体查询方法
1. 单模型变更查询
查询该用户操作的对应模型历史记录,直接对模型的history管理器按history_user过滤即可:
# 查询该用户对User模型的所有变更记录 user_user_history = User.history.filter(history_user=user) # 查询该用户对Contact模型的所有变更记录 user_contact_history = Contact.history.filter(history_user=user)
2. 汇总所有模型的变更记录
如果需要合并该用户对所有已注册历史模型的变更,可以用itertools.chain合并结果,还可按操作时间排序:
from itertools import chain # 合并所有模型的变更记录 all_user_changes = list(chain( User.history.filter(history_user=user), Contact.history.filter(history_user=user) )) # 按操作时间从新到旧排序 all_user_changes.sort(key=lambda x: x.history_date, reverse=True)
补充说明
每条历史记录自带以下常用属性可直接使用:
history_type:操作类型,+为创建、~为修改、-为删除history_date:操作发生时间history_change_reason:变更原因(需手动赋值才会有值)
注意:如果变更是无请求上下文的后台脚本触发的,
history_user会为null,这类操作无法关联到对应用户,也就不会被查询到。
内容的提问来源于stack exchange,提问作者Russell
相关产品推荐
相关产品推荐

