Ошибка выполнения 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()
Другие вопросы по тегам