Django-simple-history 在每次保存目标模型时插入新记录。在文档中描述了 F 表达式的问题。我尝试使用覆盖的保存方法来规避这个问题。
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
# some other actions
self.refresh_from_db()
但似乎,这行不通。post_save
调用后直接调用base model的信号super().save()
吗?如果是这样,有没有办法解决这个问题,让 F 表达式保持在目标模型更新中?
更新:保存的实例具有使用 F 表达式定义的属性之一,因此在其他一些模块中调用此代码:
instance.some_attribute = (F('some_attribute') + 15)
instance.save(update_fields=['some_attribute'])
这会在 django-simple-history 的信号中引发错误post_save
,当它尝试插入instance
历史表的扩展副本时。我试图在覆盖save
方法中刷新实例以摆脱 F 表达式,some_attribute
以便加载实际值。从回溯看来,在调用post_save
之后super().save()
,刷新之前就调用了。它是 Django post_save 覆盖保存的方式吗?如果是这样,有没有办法不更改更新代码(用 F 表达式保留更新)并解决模型保存中的历史插入?