这是我的信号:
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)
我做错了什么?
答案 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):
解决了您的问题。