当用户登录时,Django postave信号丢失参数

时间:2017-01-27 19:15:35

标签: python django

这是我的信号:

def deactivate_users_by_default(sender, user, created, **kwargs):
    print sender, user, created
    if created:
        user.is_active = False
        user.save()
signals.post_save.connect(deactivate_users_by_default, sender=User, dispatch_uid="deactivate_users_by_default")

当我通过管理面板或auth.login视图登录时,我得到了这个:

 response = receiver(signal=self, sender=sender, **named)
TypeError: deactivate_users_by_default() takes exactly 3 arguments (2 given)

我做错了什么?

1 个答案:

答案 0 :(得分:2)

它有点隐藏in the documentation,但只有sender作为位置参数传递给信号接收器。所有其他参数(包括模型信号的instance参数)都作为关键字args传递:

  

请注意,该函数采用sender参数以及通配符关键字参数(**kwargs);所有信号处理程序都必须采用这些参数。

这里隐含的断言是信号处理程序的所有非发送者参数作为关键字参数传递。

user与提供给post_save的任何关键字都不匹配,并且接收方没有传递位置参数来匹配它,因此出现错误消息。

deactivate_users_by_default重新声明为

def deactivate_users_by_default(sender, instance, created, **kwargs):

解决了您的问题。