2

为什么 Django-Simple 历史记录会在调用 save 方法时创建,如果我调用 update 然后它不会创建历史记录?

Django:1.11.15 Django-simple-history:1.9.0 Python:3.6

4

1 回答 1

7

正如文档中所写,这是一个已知问题:

Django 简单历史功能通过在post_save 每次保存具有历史记录的对象时使用信号来保存历史记录。但是,对于 某些批量操作,例如bulk_create和 queryset update,不会发送信号,并且不会自动保存历史记录。然而,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,从那时起它只创建了两个批量创建:一个用于对象,一个用于“历史”。

于 2018-10-28T12:51:09.697 回答