Для того, чтобы избежать такого рода цикла, то нужно отключить в начале пользовательского метода, а затем снова сигнализировать впоследствии:
Внутри вашего метода, подключенного к сигналу:
signals.post_save.disconnect(YourModel.your_custom_method, sender=YourModel)
# Do your stuff
instance.save()
signals.post_save.connect(YourModel.your_custom_method, sender=YourModel)
Примечание: Я использую «YourModel.your_custom_method, потому что я, как правило, размещать его внутри модели, это, очевидно, не является обязательным
EDIT:.
Этот вопрос SO приносит использование update() вместо save() как более чистый способ, это может быть то, что вы ищете.
Django post_save preventing recursion without overriding model save()
Хотя это может быть чище, я бы не думать о нем, как идеальное решение, если должным образом не удалось с кэшированием, так как вы будете вынуждены поразить базу данных, чтобы получить QuerySet в то время как у вас уже есть экземпляр в ваших руках в качестве аргумента сигнала ...
Идея save_without_signal кажется интересной, но мне интересно, как это можно было бы сделать без вышеупомянутых оговорок.
Надеется, что это помогает,
С уважением,
Спасибо, но жаль, возможно, я хотел бы упомянуть, мой взгляд на плохих обходных путях. Это не кажется мне самым прямым способом? – BSG
У меня нет проблем с размещением его внутри модели, а наоборот. Это отключение сигналов, которые действительно кажутся выше, но это считается «правильным» способом обращения с ним? – BSG
Ну, некоторые люди склонны не одобрять использование сигналов вместо переопределения save(), и пока я этого не делаю, отключение/повторное подключение - это, насколько мне известно, единственный способ, кроме сохранения() переопределения, чтобы обойти спасительные циклы. В документах он явно не описан как таковой, но опять же, ничего другого в этом вопросе нет. – Ambroise