Django отправляет сигналы pre/post_delete, если вы используете метод queryset.delete()
, но не следует ли ему также отправлять pre/post_save на queryset.update()
?
Django: сигнал на queryset.update
Ответ 1
Возможно, так и должно быть, но это не так. .update()
не вызывает метод .save()
для отдельных объектов в QuerySet, а вместо этого обновляет все в одном вызове SQL (UPDATE, как это происходит). Поскольку он не использует .save()
, для него было бы непоследовательным вызывать pre- и сигналы после сохранения. Я, конечно, могу представить варианты использования, в которых можно было бы сделать это, но я также могу представить случаи, в которых он не будет. Мне кажется, что неправильный вызов сигналов pre- и post-save в данном случае является правильным, поскольку оставляет программисту большую гибкость. Нетрудно запустить эти сигналы вручную, и я думаю, что определенно лучше, если разработчики попросят программистов не забывать запускать сигналы, чтобы получить желаемое поведение, чем просить их не забывать отключать сигналы, чтобы избежать нежелательного поведения.