Python 用户登录时Django postsave信号缺少参数
这是我的信号:Python 用户登录时Django postsave信号缺少参数,python,django,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_
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)
我做错了什么?它有点隐藏,但只有发送方
作为位置参数传递给信号接收方。所有其他参数(包括模型信号的实例
参数)都作为关键字args传递:
请注意,该函数接受一个sender参数以及通配符关键字参数(**kwargs
);所有信号处理程序都必须接受这些参数
这里的隐式断言是,信号处理程序的所有非发送方参数都作为关键字参数传递
user
与提供给的任何关键字都不匹配,并且接收方没有传递与之匹配的位置参数,因此出现错误消息
默认情况下重新声明停用用户\u
def deactivate_users_by_default(sender, instance, created, **kwargs):
修复您的问题。仅查看错误消息:用户
作为实例
仅关键字参数传递(在**命名
中)。将用户
重命名为实例
应该可以解决您的问题。@dhke-ahh在这种情况下参数名很重要吗?谢谢,看来是这样的