0

我正在使用来自该站点的 Django 审计跟踪。

这就是我目前访问我的历史记录的方式:

for m in MyModel.objects.all() :
    for h in m.history.all() :
        print h

这会在我的数据库中为每个模型生成一个 SQL 查询。是否可以通过单个 SQL 查询获取所有历史元素?

编辑:预取相关模型的常规方法不起作用:

MyModel.objects.prefetch_related('history')

引发 ValueError:'history' does not resolve to a item that supports prefetching

4

1 回答 1

0

从您链接的文档中

可用的管理器类型取决于您访问审计跟踪的方式。从一个实例,审计跟踪将被自动过滤,只返回与该实例相关的结果。从模型类本身,不会以任何方式过滤结果,并且是跨多个审计项目进行报告的可能方法。

听起来你想做后者。由于audit.AuditTrail不是ForeignKey,我不希望prefetch_related工作。听起来你想做

MyModel.history.all()

这将在单个查询中返回所有历史记录。

于 2013-11-12T22:00:43.740 回答