调用函数时如何解决“超出最大递归深度”?

时间:2019-07-15 03:39:47

标签: python overloading infinite-recursion

我正在设置自定义用户身份验证,当我尝试在Powershell中创建超级用户时,出现错误“ [上一行重复986次以上] RecursionError:超过最大递归深度” 指的是我的create_superuser()

models.py

def create_superuser(self, username, password=None):
    user = self.create_superuser(
        username,
        password = password,
        is_staff = True,
        is_admin = True

    )
    user.save(using=self._db)
    return user

2 个答案:

答案 0 :(得分:1)

您似乎要调用重载函数。

在Python中,没有函数重载。相反,函数可以具有灵活的签名(optional arguments, receiving any arguments via *args and **kwargs)。 如果您在同一个作用域中定义了两个具有相同名称的函数,则解释器稍后遇到的一个函数将简单地替换前一个。

因此,您需要使用灵活的签名将两个功能合并为一个。 (没有什么可以阻止您分离辅助函数或其他功能的,但它们需要使用不同的名称)。

答案 1 :(得分:0)

创建超级用户就是创建强制密码的用户

class UserProfileManager(BaseUserManager):
    """ Manager para perfiles de usuario """
    def create_user(self, username, password=None):
        """ Crear Nuevo UserProfile """
        if not username:
            raise ValueError('username!!!')
        #email= self.normalize_email(email)
        user = self.model(username=uername)
        user.set_password(password)
        user.save(using=self._db)

        return user

    def create_superuser(self, username, password): 
        user = self.create_user(username=username, 
                            password = password,
                            is_staff=True,
                            is_admin = True)
        user.save(using=self._db)
        return user