Why Django-Simple history records get created on calling save method if I call update then it doesn't create history record ?
Django : 1.11.15 Django-simple-history : 1.9.0 Python : 3.6
As is written in the documentation this is a known issue:
Django Simple History functions by saving history using a
post_savesignal every time that an object with history is saved. However, for certain bulk operations, such asbulk_createand querysetupdates, signals are not sent, and the history is not saved automatically. However, Django Simple History provides utility functions to work around this.
So basically the app makes use of the fact that you .save() the model, and this is circumvented by some ORM calls (because then you can not perform the actions in "bulk" at the database level anymore).
Instead of using
Entry.objects.filter(pub_date__year=2010).update(comments_on=False)
you thus need to perform:
for e in Entry.objects.filter(pub_date__year=2010):
e.comments_on = False
e.save()
For a bulk_create there is a variant: bulk_create_with_history, since then it simply makes two bulk creates: one for the objects, and one for the "histories".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With