Доброго времени суток, друзья! Сегодня я расскажу о очень крутой возможности Django — сигналах. Сперва немного теории. Когда в Django происходит некоторое событие (к примеру, в модель были записаны данные) Django генерирует signal (на самом деле — несколько сигналов. Во время иницилизации, перед записью данных, после записи и т.д.). Эти сигналы можно «ловить» и выполнять любые действия. Давай разберём работу сигналов на примере.
Итак, я установил
from webmoney.models import Payment
from django.dispatch import receiver
from django.db.models.signals import post_save
@receiver(post_save, sender=Payment)
def webmoney_payment_accepted(sender, **kwargs):
"""
Функция создания транзакции
при пополнении webmoney
"""
payment = kwargs['instance']
Transaction.objects.create(
balance = payment.invoice.user.balance,
transaction_type = 1,
cost = payment.amount
)
Как видно из примера — мы «ловим» сигнал, определяем в payment созданный объект и добавляем транзакцию в нашу модель (дальше эта транзакция похожим сигналом инкрементирует баланс пльзователя).
Вот и всё!
Django, спасибо тебе за твою простоту и доходчивость.
Конечно же, по этому вопросу есть замечательная Источник: