如何判断一个模型是否有简单的历史记录?

How to tell if a model has simple-history records?

我需要一种方法来判断模型是否具有简单历史 HistoricalRecord

一个不好的方法是检查 self.history 是否存在,但我不喜欢这样,因为开发人员不必使用 use history 作为 HistoricalRecord 的属性名称。

或者,我可以尝试遍历 dir(model),但这会遇到相关名称反向查找可能导致 DoesNotExist 异常的问题。我可以尝试捕获异常,但这很难看。

我需要这个,因为我想在 django admin 中添加一个 link 到一个特殊视图,我查看简单的历史记录并且我想显示 link 只有当模型有 HistoricalRecords.

经过一番挖掘,simple-history 似乎记录了所有具有历史对象的模型!多方便啊!这个问题的解决方案可以是

from simple_history import models

def has_simple_history(obj):
    return obj.__class__ in models.registered_models.values()