django信号无限递归循环解决

最近在实现django信号量实现保存用户时发生了错误

报错如下:

maximum recursion depth exceeded while calling a Python object

代码如下所示

user/signals.py

@receiver(post_save,sender=User)

def create_user(sender,instance=None,created=False,**kwargs):

    if create_user:

        password = instance.password

        instance.set_password(password)

        instance.save()

user/apps.py

class UsersConfig(AppConfig):

    name = 'users'

    verbose_name = "xx信息管理"

    def ready(self):

        import  users.signals
出现这个错误的原因是因为instance.save()触发了信号,然后再次保存,然后一直无限循环下去…..
解决办法:
@receiver(post_save,sender=User)

def create_user(sender,instance=None,created=False,**kwargs):

    if create_user:

        # 解决无限递归循环

        post_save.disconnect(create_user, sender=sender)

        password = instance.password

        instance.set_password(password)

        instance.save()

        post_save.connect(create_user, sender=sender)
使用post_save.disconnect断开连接,然后在save()保存后重新连接信号

发表回复