You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:57:03