Ответ 1
Как уже упоминалось, bulk_create
не вызывает эти сигналы -
https://docs.djangoproject.com/en/1.8/ref/models/querysets/#bulk-create
Этот метод вставляет предоставленный список объектов в базу данных в эффективный способ (обычно только 1 запрос, независимо от того, сколько объекты есть).
У этого есть несколько предостережений:
- Метод save() не будет вызываться, а сигналы pre_save и post_save не будут отправлены.
- Он не работает с дочерними моделями в сценарии наследования с несколькими таблицами.
- Если первичный ключ модели - это AutoField, он не извлекает и не устанавливает атрибут первичного ключа, как это делает save().
- Он не работает с отношениями "многие ко многим".
- Параметр batch_size определяет, сколько объектов создается в одном запросе. По умолчанию создается все объекты в одной партии, кроме SQLite, где значение по умолчанию таково, что не более 999 переменных для каждого запроса.
Таким образом, вы должны запускать их вручную. Если вы хотите, чтобы это для всех моделей, вы можете переопределить bulk_create
и отправить их себе так:
class CustomManager(models.Manager):
def bulk_create(items,....):
super().bulk_create(...)
for i in items:
[......] # code to send signal
Затем используйте этот менеджер -
class Task(models.Model):
objects = CustomManager()
....