我正在django中构建应用程序,我决定添加历史记录以跟踪模型中数据的更改。我正在使用django-simple-history来实现这一目标。该软件包显然会在post_save信号上保存历史记录。
我希望能够在不保存历史记录的情况下保存对象,例如当我运行一些后台查询并需要保存数据时。我的问题是,“我可以阻止模型发出保存后信号”
我目前有一个解决方法。我有一个布尔变量,当我想显示该记录的历史记录时,我将其设置为True。但这并不妨碍创建历史记录。
感谢你。
答案 0 :(得分:2)
我对信号不太热,但我认为你应该改变信号处理程序,而不是停止发出信号。如果您在保存模型后需要执行其他一些不相关的操作,该怎么办?
尝试在django-simple-history / simple_history / models.py中修补create_historical_record(),将以下代码段放在顶部:
create_historical_record(self, instance, type):
if hasattr(instance, 'save_history') and not instance.save_history:
return
#rest of method
您还可以尝试暂时断开历史跟踪器与模型实例的连接,然后重新连接它,但我不知道您在哪里这样做。它也可能更容易出错。
哦,是的,你也可以继承HistoricalRecords:
class OptHistoricalRecords(HistoricalRecords):
def create_historical_record(self, instance, type):
if hasattr(instance, 'save_history') and not instance.save_history:
return
else:
super(OptHistoricalRecords,self).create_historical_record(instance,type)
答案 1 :(得分:0)
有一种方法可以使用contribute_to_class
为模型做出贡献,其名称为save_without_historical_record
:
obj.some_field = new_value
obj.save_without_historical_record()
...
# now create a record.
obj.save()