Подключение к сигналам, отправленным определенными отправителями, не работает должным образом - PullRequest
0 голосов
/ 28 июня 2018

У меня есть модели, как показано ниже

class WalletTransactions(models.Model):
     ...
     fields here    
     ...

class WalletBalance(models.Model):
     ...
     fields here    
     ...    

Обработчик сигнала, как показано ниже

@receiver(post_save, sender=WalletTransactions)
def update_balance(sender, instance, created, **kwargs):
    print instance.payment_type #field in model

И наконец регистрация

post_save.connect(update_balance, dispatch_uid=uuid.uuid4())

Теперь я ожидаю, что update_balance будет вызываться только тогда, когда save на WalletTransaction вызывается согласно doc .

Но когда я пытаюсь войти в свое приложение, вызывается update_balance, когда вызывается save на Session, выбрасывая следующую ошибку.

AttributeError at / login /
Объект 'Session' не имеет атрибута 'payment_type'

В чем здесь может быть ошибка?

1 Ответ

0 голосов
/ 28 июня 2018

Вы подключаете функцию обратного вызова дважды . Вы можете подключить сигнал с @receiver или с post_save.connect.

Смотрите здесь для получения дополнительной информации: https://docs.djangoproject.com/en/1.11/topics/signals/#connecting-receiver-functions

Кроме того, вы не указали sender в post_save.connect(). Таким образом, вы подключаете обратный вызов к методу сохранения каждого объекта.

Чтобы все заработало, просто удалите эту строку:

post_save.connect(update_balance, dispatch_uid=uuid.uuid4())
...