sc.nextLine()
лучше по сравнению с анализом ввода. Потому что производительность разумна, это будет хорошо.
Как уже упоминалось, bulk_create
не вызывает эти сигналы -
https://docs.djangoproject.com/en/1.8/ref/models/querysets/#bulk-create
Этот метод эффективно вставляет предоставленный список объектов в базу данных (как правило, только 1 запрос, независимо от того, сколько там объектов).
имеет несколько предостережений:
blockquote>
- Метод 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() ....
Итерация по ответу выше:
Python 2:
class CustomManager(models.Manager):
def bulk_create(self, objs, **kwargs):
#Your code here
return super(models.Manager,self).bulk_create(objs,**kwargs)
Python 3:
class CustomManager(models.Manager):
def bulk_create(self, objs, **kwargs):
#Your code here
return super().bulk_create(objs,**kwargs)
class Task(models.Model):
objects = CustomManager()
....
Полный ответ в python 2:
class CustomManager(models.Manager):
def bulk_create(self, objs, **kwargs):
a = super(models.Manager,self).bulk_create(objs,**kwargs)
for i in objs:
post_save.send(i.__class__, instance=i, created=True)
return a