使用 Django Simple History 创建历史记录的问题

Arp*_*pit 2 django django-simple-history python-3.6

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

Django:1.11.15 Django-简单历史:1.9.0 Python:3.6

Wil*_*sem 6

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

Django Simple History 的功能是在post_save 每次保存具有历史记录的对象时使用信号保存历史记录。但是,对于 某些批量操作,例如bulk_create和 queryset updates,不会发送信号,并且不会自动保存历史记录。然而,Django Simple History 提供了实用函数来解决这个问题。

因此,基本上该应用程序利用.save()了模型这一事实,而这会被一些 ORM 调用所规避(因为这样您就无法再在数据库级别“批量”执行操作了)。

而不是使用

Entry.objects.filter(pub_date__year=2010).update(comments_on=False)
Run Code Online (Sandbox Code Playgroud)

因此,您需要执行:

for e in Entry.objects.filter(pub_date__year=2010):
    e.comments_on = False
    e.save()
Run Code Online (Sandbox Code Playgroud)

对于 abulk_create有一个变体:bulk_create_with_history,从那时起它只是进行两个批量创建:一个用于对象,另一个用于“历史”。