Подтвердить что ты не робот

Как сохранить модель без отправки сигнала?

Как сохранить модель, чтобы посылать сигналы arent. (post_save и pre_save)

4b9b3361

Ответ 1

Это немного взломать, но вы можете сделать что-то вроде этого:

используйте уникальный идентификатор с фильтром, а затем используйте метод обновления набора запросов (который не вызывает сигналы)

user_id = 142187
User.objects.filter(id=user_id).update(name='tom')

Ответ 2

Этот билет был помечен как "wontfix", потому что:

Короче говоря, это звучит так, что, учитывая определенную цель сигналов, именно подключенный обработчик сигналов должен стать более интеллектуальным (как в предложении davedash), а не код, который излучает сигнал. Отключение сигналов - это просто быстрое исправление, которое будет работать, когда вы точно знаете, какие обработчики подключены к сигналу, и оно скрывает основную проблему, помещая исправление в неправильное место.

Ответ 3

В настоящее время существует ticket в ожидании решения по дизайну Django для этой функции.

В этот билет входит различие для патча с предлагаемой реализацией.

Ответ 4

Если у вас есть взаимоотношения между моделями и их сигналами, вы можете отделить сигнальную логику, чтобы иметь больше сигналов одного типа, и обрабатывать свою логику более сложным способом:

Вы можете проверить в сигналах, состояние объекта:

kwargs['created']

Вы можете проверить состояние любого вставленного дополнительного значения: поэтому в одном сигнале вы сначала прочитаете:

if 'kwargs['instance'].skip_signals':
   return

а в другом месте перед save() вы просто установите этот skip_signals для конкретного объекта в конкретной ситуации. (нет необходимости определять его как поле модели)

Вы также можете не излучать сигналы:

  • путем переопределения метода (ов) на моделях,
  • или добавив собственный save_without_signals(),
  • или, как уже упоминалось, делает filter(pk=<>).update(...)

Ответ 5

ModelName.objects.bulk_create([your object/objects])

Также вы можете прочитать больше здесь Django Docs