为什么 Django-Simple 历史记录会在调用 save 方法时创建,如果我调用 update 然后它不会创建历史记录?
Django:1.11.15 Django-simple-history:1.9.0 Python:3.6
为什么 Django-Simple 历史记录会在调用 save 方法时创建,如果我调用 update 然后它不会创建历史记录?
Django:1.11.15 Django-simple-history:1.9.0 Python:3.6
正如文档中所写,这是一个已知问题:
Django 简单历史功能通过在
post_save
每次保存具有历史记录的对象时使用信号来保存历史记录。但是,对于 某些批量操作,例如bulk_create
和 querysetupdate
,不会发送信号,并且不会自动保存历史记录。然而,Django Simple History 提供了实用函数来解决这个问题。
所以基本上应用程序利用了你.save()
的模型这一事实,这被一些 ORM 调用所规避(因为你不能再在数据库级别“批量”执行操作)。
而不是使用
Entry.objects.filter(pub_date__year=2010).update(comments_on=False)
因此,您需要执行:
for e in Entry.objects.filter(pub_date__year=2010):
e.comments_on = False
e.save()
对于 abulk_create
有一个变体: bulk_create_with_history
,从那时起它只创建了两个批量创建:一个用于对象,一个用于“历史”。