使用Django简单历史记录创建历史记录时出现问题

时间:2018-10-28 12:44:29

标签: django python-3.6 django-simple-history

如果我调用update时为什么为什么在调用save方法时创建了Django简单历史记录,但它没有创建历史记录?

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

1 个答案:

答案 0 :(得分:2)

documentation中写道,这是一个已知问题:

  

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()

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