Альтернативы Django post_save - PullRequest
0 голосов
/ 22 апреля 2020

вопрос по Django сигналам, например post_save:

Насколько я понимаю, обновления объекта, вызванные сигналом post_save, запускают дополнительный вызов для post_save этого объекта. Сделав еще один шаг, синхронизация двух моделей с помощью 2 post_save сигналов вызывает post_save для объекта одной модели, который затем вызывает post_save для объекта другой модели, а затем, по меньшей мере, post_save возвращается к оригиналу. Есть ли способ отключить рекурсию здесь?

Кроме того, вообще, действительно ли это шаблон, который масштабируется и одобряется сообществом Django? Недавно наткнулся на эту статью , предлагающую переопределение функции сохранения модели, но кажется, что этот подход также не рассматривается положительно среди Django пользователей. Есть ли другой способ?

1 Ответ

0 голосов
/ 22 апреля 2020

Я не знаю, где вы нашли это утверждение, что перевес Model.save будет "обескуражен" и что "сигналы, предназначенные для этого конкретного c случая", но это просто бессмысленный смысл. По первому пункту, просто обратитесь к официальной документации :

. Есть еще один набор методов модели, которые инкапсулируют множество поведений базы данных , которые вы хотите настроить . В частности вы часто будете хотеть изменить способ работы save () и delete () .

Вы можете переопределить эти методы (и любой другой метод модели), чтобы изменить поведение .

Вариант использования classi c для переопределения встроенных методов: если вы хотите, чтобы что-то происходило при сохранении объекта .

Невозможно прояснить, что переопределение save() является официально рекомендованным (и совершенно очевидным) действием.

Теперь, что касается сигналов, и здесь официальная документация совершенно ясна :

Django включает в себя «диспетчер сигналов», который позволяет отсоединенным приложениям получать уведомления о действиях в других местах в рамках.

IOW, сигналы предназначены для того, чтобы помочь в написании хорошо отделенных (и, возможно, многократно используемых) приложений - НЕ для добавления пользовательских поведений в ваши собственные модели (что не имеет никакого смысла - вы сами) модели, так зачем использовать какие-либо индиректи на уровне, когда вы можете просто переопределить методы модели?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...