Ошибка выполнения Django: вызов метода в __init__ приводит к превышению максимальной глубины рекурсии
Я хочу позвонить password_generator
метод, когда Register
создается экземпляр класса и присваивает возвращаемое значение из метода password
поле.
Когда объект регистра создается, почему я получаю
RuntimeError в /register/
максимальная глубина рекурсии превышена при вызове объекта Python
Это код
models.py
class Register(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
email = models.EmailField(max_length=120, blank=False, null=False)
password = models.TextField(blank=False, null=False)
firstname= models.CharField(max_length=120, blank=False, null=False)
lastname = models.CharField(max_length=120, blank=False, null=False)
phonenumber = models.CharField(max_length=120, blank=True, null=True)
def __init__(self, *args, **kwargs):
self.password = Register().password_generator()
#Generate random login password for candidate
def password_generator(self, size=30, chars=string.ascii_letters + string.digits + string.punctuation):
return ''.join(random.choice(chars) for i in range(size))
Логи с терминала
приставка
File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
self.password = Register().password_generator()
File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
self.password = Register().password_generator()
File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
self.password = Register().password_generator()
File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
self.password = Register().password_generator()
File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
self.password = Register().password_generator()
File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
self.password = Register().password_generator()
File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
self.password = Register().password_generator()
File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
self.password = Register().password_generator()
File "D:\Project\Online-Examination-System\register\models.py", line 31, in __init__
self.password = Register().password_generator()
Как это исправить?
1 ответ
После многих попыток я понял, что функция, которую я пытаюсь вызвать, находится в бесконечном цикле. Чтобы получить доступ password_generator()
метод, я должен сделать Register().password_generator()
, Так что это также означает, __init__
метод называется - из-за Register()
, в __init()__
Я снова позвоню Register()
, Вот почему это становится бесконечной петлей. Чтобы решить эту проблему, мы должны использовать:
def __init__(self, *args, **kwargs):
self.password = self.password_generator()