Проблема в создании истории записи с использованием Django Simple History - PullRequest
0 голосов
/ 28 октября 2018

Почему записи истории Django-Simple создаются при вызове метода сохранения, если я вызываю update, тогда он не создает запись истории?

Django: 1.11.15 Django-simple-history: 1.9.0 Python:3,6

1 Ответ

0 голосов
/ 28 октября 2018

Как написано в документации , это известная проблема:

Django Simple History функционирует, сохраняя историю, используя сигнал post_save каждый раз, когда объект с историейсохраняетсяОднако для определенных массовых операций, таких как bulk_create и набор запросов update s, сигналы не отправляются, и история не сохраняется автоматически .Тем не менее, 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, поскольку с тех пор он просто создает два объемных создания: одно для объектов и одно для"истории".

...