如果我调用update时为什么为什么在调用save方法时创建了Django简单历史记录,但它没有创建历史记录?
Django:1.11.15 Django的简单历史:1.9.0 Python:3.6
答案 0 :(得分:2)
documentation中写道,这是一个已知问题:
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()
对于bulk_create
,有一个变体:bulk_create_with_history
,从那时起,它只创建了两个批量创建:一个用于对象,一个用于“历史”。